私はジェンキンスをコンテナ内で実行していて、githubのソースコードをプロジェクトしています。
Jenkinsと同じホスト上のコンテナーでプロジェクトを実行する必要がありますが、docker-in-dockerではなく、兄弟コンテナーとして実行したいと思います。
私のパイプラインは次のようになります:
私が今やっていることは、jenkinsコンテナからホストのDockerソケットを使用しています:
/var/run/docker.sock:/var/run/docker.sock
Jenkinsコンテナーが/ var/jenkins_home/workspace/BRANCH_NAMEからプロジェクトコンテナーにソースコードを含むボリュームをマウントするときに問題が発生します。
volumes:
- ./servers/identity/app:/srv/app
プロジェクトコンテナーに空のフォルダー「/ srv/app」を取得しています
私の推測では、dockerはjenkinsコンテナーからではなく、ホストからマウントしようとしていると考えられます。
だから問題は、ボリュームをマウントするコンテナを明示的に設定するにはどうすればよいですか?
Jenkins Dockerコンテナーを使用して別のコンテナーを実行すると、同じ問題が発生しました。
これは推奨される方法ではありません。ここでは explanations を使用します。それでもこのアプローチを使用する必要がある場合、この問題は問題ではありません。
Jenkins Dockerコンテナー内で別のコンテナー( ContainerA )を実行する必要があるとします。dockerパイプラインプラグインは--volumes-from
を使用して Jenkinsコンテナボリュームを ContainerA にマウントします。
--volume
または-v
を使用して Jenkinsコンテナの特定のディレクトリを ContainerA にマッピングしようとすると、予期しない動作が発生しました。
これは、--volumes
または-v
が Host のディレクトリを ContainerA にマッピングしようとするため、ディレクトリからマッピングするのではないためです。 Jenkinsコンテナの中。 Host にディレクトリが見つからない場合、 ContainerA 内に空のディレクトリが取得されます。
つまり、containerAからcontainerBに特定のディレクトリをマップすることはできません。containerAからcontainerBにボリューム全体をマウントすることしかできません ボリュームエイリアスはサポートされていません 。
「/ var/jenkins_home」はJenkinsコンテナのボリュームである可能性が最も高いため、ホストとJenkinsの間で靴下を共有することが私の問題でした。
私のソリューションは、sockを共有せずにsystemdコンテナー内にdockerをインストールすることでした。
docker run -d --name jenkins \
--restart=unless-stopped \
--privileged \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-v jenkins-vol:/var/lib/jenkins \
--tmpfs /run \
--tmpfs /run/lock \
ubuntu:16.04 /sbin/init
次に、Jenkins、Docker、Docker Composeをインストールします。
試してください:
docker run -d --volumes-from <ContainerID> <YourImage>
ここで、コンテナーIDは、モンデータを取得するコンテナーのIDです。
次の方法でボリュームを作成することもできます。
docker volume create <volname>
両方のコンテナに割り当てます
volumes:
- <volname>:/srv/app