web-dev-qa-db-ja.com

Jenkinsの誤ったボリューム権限

私は、Dockerをインストールし、docker-composeファイルを使用してコンテナーを作成した、Oracle Linuxをホストする仮想マシンを持っています。 jenkinsボリュームを共有フォルダーの下に配置しましたが、docker-composeを起動すると、Jenkinsに対して次のエラーが発生しました。

ジェンキンス| touch: ‘/var/jenkins_home/copy_reference_file.log'にタッチできません:アクセス許可がjenkinsを拒否しました| /var/jenkins_home/copy_reference_file.logに書き込めません。ボリュームの権限が間違っていますか?ジェンキンスはコード1で終了しました

これがボリューム宣言です

  volumes:
    - "/media/sf_devops-workspaces/dev-tools/continuous-integration/jenkins:/var/jenkins_home"
14
Taoufik Jabbari

問題は、コンテナー内のユーザーが、ホスト上のユーザーとは異なるuserid:groupidを持っていることです。

次の2つの可能性があります。

  1. コンテナー内のユーザーが、マウントされたボリュームにアクセスできるホスト上のユーザーと同じuserid:groupidを持っていることを確認できます。このためには、Dockerfileでユーザーを調整する必要があります。同じuserid:groupidでdockerfileにユーザーを作成してから、このユーザーに切り替えます https://docs.docker.com/engine/reference/builder/#user

  2. ホスト上のユーザーが、コンテナー内のユーザーと同じuserid:groupidを持っていることを確認できます。このためには、docker exec -it <container-name> bashを使用してコンテナーを入力し、ユーザーID id -u <username>グループID id -G <username>を表示します。マウントされたボリュームの権限をこのuserid:groupidに変更します。

10
haschibaschi

-uパラメーターを使用するように簡単に修正します。これはrootユーザー(uid = 0)として実行されることに注意してください

docker run -u 0 -d -p 8080:8080 -p 50000:50000 -v /data/jenkins:/var/jenkins_home jenkins/jenkins:lts
9
Kiem Nguyen

Haschibaschiが述べたように、コンテナー内のユーザーには、ホスト上のユーザーとは異なるuserid:groupidがあります。

これを回避するには、(問題のある)ボリュームマッピングなしでコンテナーを起動し、コンテナーでbashを実行します。

docker run -p 8080:8080 -p 50000:50000 -it jenkins bin/bash

コンテナーのシェルの内部でidコマンドを実行すると、次のような結果が得られます。

uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins)

コンテナーを終了し、マップして実行しようとしているフォルダーに移動します。

chown -R 1000:1000 .

許可が一致したので、ボリュームマッピングを使用して元のdockerコマンドを実行できるはずです。

9
Vice

まず、echo $USERコマンドを使用して現在のユーザーを確認し、その後、Dockerfileで次のように誰がユーザーであるかを説明できます(私の場合、ユーザーはrootです) screenshot

0
mafei

このエラーは、次のコマンドを使用して解決します。

jenkinsデータマウントパスに移動します:/ media

次のコマンドを実行します。

cd /media
Sudo chown -R ubuntu:ubuntu sf_devops-workspaces

jenkins Dockerコンテナを再起動します

docker-compose restart jenkins
0
Mayur Kothari

SELinuxを使用している可能性があります。特権付きでコンテナを実行すると、問題が解決しました:

Sudo docker run --privileged -p 8080:8080 -p 50000:50000 -v /data/jenkins:/var/jenkins_home jenkins/jenkins:lts

https://docs.docker.com/engine/reference/commandline/run/#full-container-capabilities---privileged から:

--privilegedフラグはコンテナーにすべての機能を提供し、デバイスのcgroupコントローラーによって適用されるすべての制限を解除します。つまり、コンテナはホストが実行できるほとんどすべてのことを実行できます。このフラグは、Docker内でDockerを実行するような特別なユースケースを許可するために存在します。

0
staylorx