web-dev-qa-db-ja.com

Ubuntu上のDockerJenkinsのDocker-docker.sockの権限の問題

https://getintodevops.com/blog/the-simple-way-to-run-docker-in-docker-for-ci)で説明されているアプローチと同様のJenkinsdockerイメージをセットアップしようとしています。

私の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 777docker.sockファイルを使用することですが、これは私には間違っているようです。私が見逃している他のステップや私が従うことができる他の解決策はありますか?

ホストOSはUbuntu19.04、Dockerバージョン19.03.0-beta2、ビルドc601560です。

2
Chris Cooper

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をユーザー名に置き換えることができます。

3
Fanatique