私のDockerfileは次のようになります。
FROM jenkins/jenkins:lts
USER root
RUN apt-get update && apt-get -y install Sudo
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
RUN apt-get install -y apt-transport-https ca-certificates \
curl gnupg2 software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | Sudo apt-key add -
RUN add-apt-repository "deb [Arch=AMD64] \
https://download.docker.com/linux/debian stretch stable"
RUN apt-get update
RUN apt-get install -y docker-ce docker-ce-cli containerd.io
RUN usermod -aG docker jenkins
USER jenkins
そして、私は次のようにコンテナを起動しています:
docker run -d -v jenkins_home:/var/jenkins_home \
-p 8080:8080 -p 50000:50000 \
-v /var/run/docker.sock:/var/run/docker.sock customjenkins
ただし、ビルドを実行すると(または、コンテナーにexecを実行してdocker ps
を実行すると)、次のようになります。
Got permission denied while trying to connect to the Docker daemon socket
at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/
containers/json: dial unix /var/run/docker.sock: connect: permission denied
これを機能させる唯一の方法は、chmod 777
docker.sock
ファイルを使用することですが、これは私には間違っているようです。私が見逃している他のステップや私が従うことができる他の解決策はありますか?
ホストOSはUbuntu19.04、Dockerバージョン19.03.0-beta2、ビルドc601560です。
Sudoでコマンドを実行する必要があります:
Sudo docker run -d -v jenkins_home:/var/jenkins_home \
-p 8080:8080 -p 50000:50000 \
-v /var/run/docker.sock:/var/run/docker.sock customjenkins
それ以外の場合は、ソケットへの読み取り/書き込み権限がありません。これは完全に正常であり、予期されたものです。 chmod 777
を使用すると、セキュリティ上の問題が発生するため、実際には悪い考えです。
Sudoを使用する以外に、dockerを使用するための2つの推奨される方法があります。
1。ユーザーをDockerグループに追加します。
Sudo gpasswd -a $USER docker
注:グループdockerが存在しない場合は、最初に作成できます。
Sudo groupadd docker
2。 ACLを使用して、Dockerソケットを使用する権限をユーザーに追加します。
Sudo setfacl -m user:$USER:rw /var/run/docker.sock
必要に応じて、$USER
をユーザー名に置き換えることができます。