2017-07-20 26 views
0

私はCI作業用のjenkinsドッカー・コンテナを立ち上げています。私が使用しているホストOSはCoreOSです。 Jenkinsコンテナの中で、私はホストシステムのドッカーコンテナにビルドを実行するためにdocker-cliもインストールしました。root権限を持たないユーザーのためにドッカー・コンテナにボリューム権限を設定する方法

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.29/containers/json: dial unix /var/run/docker.sock: connect: permission denied 
:私はコンテナを起動し、ドッキングウィンドウのコマンドを実行したときに

volumes: 
     - /jenkins/data:/var/jenkins_home 
     - /var/run/docker.sock:/var/run/docker.sock:rw 

、私はエラーの下になった:そのために、私はマッパードッカーソケット用ジェンキンスコンテナに/var/runをマウントする設定の下に使用します

/var/runはroot権限ですが、私のユーザーはjenkinsです。どのようにしてjenkinsユーザーがマッパーソケットを通してdockerコマンドを使用できるように許可の問題を解決できますか?

私は、コマンドの下に試してみましたが、コンテナは私がsudoを実行することはできません:

$ sudo usermod -a -G docker jenkins 

We trust you have received the usual lecture from the local System 
Administrator. It usually boils down to these three things: 

    #1) Respect the privacy of others. 
    #2) Think before you type. 
    #3) With great power comes great responsibility. 

sudo: no tty present and no askpass program specified 

答えて

0

ドッカーの権限についての魔法のようなものは何もありません:彼らはちょうどドッカーの外パーミッションように動作します。つまり、ユーザーがファイル(/var/run/docker.sockなど)にアクセスできるようにするには、そのファイルをユーザーが所有しているか、適切なグループのメンバーであるか、ファイルのアクセス権が必要です誰かへのアクセスを許可する。典型的なソリューション(コンテナ内部からわずかchown/chmod物事が)潜在的にあなたのホスト上で物事を中断しますので、root以外のユーザーに/var/run/docker.sockの公開

は、少しトリッキーです。

私は最善の解決策は、かもしれ疑う:

  • ホスト上/var/run/docker.sockがグループ書き込み可能な(例えば、ホスト上のdockerグループを作成し、そのグループ内のユーザーがドッカーを使用できることを確認してください)であることを確認してください。
  • dockerグループの数値グループIDを環境変数としてコンテナに渡します。
  • コンテナ内に、(a)一致する数字のgidを持つグループを作成し、(b)そのグループのメンバーになるようにJenkinsのユーザーを変更し、次に(c)execドッカーCMDをjenkinsユーザーとして使用します。

ので、このようになりますあなたのエントリポイントのスクリプトは、(あなたがdocker-compose.yml$DOCKER_GROUP_IDの値に合格したと仮定して):

#!/bin/sh 

groupadd -g $DOCKER_GROUP_ID docker 
usermod -a -G docker jenkins 

exec runuser -u jenkins "[email protected]" 

はあなたがあなたのイメージにこれをコピーして追加する必要がありますDockerfileへの適切なENTRYPOINTディレクティブ。

runuserコマンドを使用していない可能性があります。 sudoまたはsuなどの類似のコマンドを使用して、同様の処理を実行できます。

+0

私は、コンテナで 'sudo'コマンドを使用できないことがわかりました。私はsudoコマンドを実行すると、以下のエラーが表示されます: 'あなたはローカルのシステム 管理者から通常の講義を受けたと信じています。それは通常これらの3つのものに沸く: #1)他人のプライバシーを尊重する。 #2)入力する前に考えてみてください。 #3)大きな力で大きな責任がもたらされます。 sudo:ttyが存在せず、askpassプログラムが指定されていません。 –

+0

これを正しく設定するか、別のオプションを使用する必要があるかもしれません。 – larsks