1. ホーム
  2. linux

Docker in Dockerでボリュームをマウントできない

2023-08-15 02:50:06

質問

Jenkinsのクラスタを運用していますが、マスターとスレーブの両方がDockerコンテナとして動作しています。

ホストは、MacOS上で動作する最新のboot2docker VMです。

JenkinsがDockerを使ってデプロイできるように、ホストからJenkinsコンテナにdocker.sockとdockerクライアントを以下のようにマウントしています:-)

docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v $HOST_JENKINS_DATA_DIRECTORY/jenkins_data:/var/jenkins_home -v $HOST_SSH_KEYS_DIRECTORY/.ssh/:/var/jenkins_home/.ssh/ -p 8080:8080 jenkins

Jenkinsコンテナ内で実行されるDockerコンテナにボリュームをマウントする際に、問題に直面しています。例えば、私がJenkinsコンテナ内で別のコンテナを実行する必要がある場合、私は次のようにします:-)

sudo docker run -v $JENKINS_CONTAINER/deploy.json:/root/deploy.json $CONTAINER_REPO/$CONTAINER_IMAGE 

上記でコンテナは実行されますが、ファイル "deploy.json" はファイルとしてマウントされておらず、代わりに "Directory" としてマウントされています。ディレクトリをボリュームとしてマウントしても、結果のコンテナ内のファイルを表示することはできません。

これは、Docker の場合の Docker によるファイルのパーミッションの問題なのでしょうか。

どのように解決するのですか?

Docker コンテナ内の Docker コンテナは親 HOST の Docker デーモンを使用するため、"docker-in-docker" のケースでマウントされたボリュームは、コンテナからではなく、依然として HOST から参照されることになります。

したがって、Jenkins コンテナからマウントされた実際のパスは、HOST に "存在しません"。このため、空の "docker-in-docker" コンテナ内に新しいディレクトリが作成されます。Container内の新しいDockerコンテナにディレクトリがマウントされた場合も同様です。

非常に基本的で明白なことですが、私は見逃していましたが、質問をタイプしてすぐに気づきました。