私はDockerと少し違うことをするために働いている会社でdev opsから質問されています。ビルドを共有する名前付きドッカーのボリュームが更新されない
コンテナA: フロントエンド反応アプリケーションを構築し、そのバンドルをapp/dist/
というディレクトリに配置するノードコンテナです。これが完了すると、コンテナの実行が停止します。
コンテナB: 静的ファイルをサーバにするalpine nginxコンテナ/usr/share/nginx/html/app
。
コンテナAに組み込まれたファイルは、<Container A>/app/dist
〜<Container B>/usr/share/nginx/html/app
をマウントするボリュームを使用してコンテナBに提供されます。
パブリックアクセス可能ポートとnginxコンテナの間には、app
というコンテナであるHAProxyレイヤがあります。上記の次のようなドッキングウィンドウのコンポーズファイルを使用して編成されている
タスク:これは現在ドッキングウィンドウのコンファイルが構築されているのみで初めて取り組んでいる
version: '2'
volumes:
webapp_build_volume: {}
services:
webapp_build:
build:
context: .
dockerfile: 'config/nginx/dockerfile-builder'
volumes:
- webapp_build_volume:/app/dist
- webapp_static_volume:/app/src/app/static
app:
build:
context: 'config/haproxy'
dockerfile: 'dockerfile-app-haproxy'
links:
- web
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- '80:80'
- '1936:1936'
web:
build:
context: .
dockerfile: 'config/nginx/dockerfile-web'
environment:
- EXCLUDE_PORTS=443
- VIRTUAL_HOST=*
depends_on:
- webapp_build
volumes:
- webapp_build_volume:/usr/share/nginx/html/app
。ボリュームが作成された後も、ボリューム内のファイルは更新されません。名前を付けられたボリュームは確立された後に更新できないが、これを確認することはできないということを読んだ。私はdocker-compose rm --force && docker volume webapp_build rm
を実行することを含む回避策を見つけましたが、CIサービスが遅すぎる可能性があるので、キャッシュされたコンテナを強制終了する必要はありません。
何かを明確にすることができるかどうか教えてください(ここには多くの可動部分があります)。私はここでやったことがどう変わるか分かりませんが、ドッカー2のベータ版も使用しています。
今ソリューション1をしようとしています。まもなくお知らせいたします! – Shawn
ありがとうございます。あなたの最初の解決策がそこで働いた。なぜこれによってボリュームは更新されますが、ディレクトリへの構築は行われませんでしたか? – Shawn
ディレクトリにビルドしましたが、ビルド中にボリュームがマウントされていませんでした。これは、コンテナを実行するときに発生します。実行中のコンテナにボリュームをマウントすると、Dockerはボリュームが空のときにイメージの内容をボリュームにコピーし、後でこのボリュームの初期化ステップは実行されません(そうしないと、 2番目のコンテナでボリュームを使用しようとしたときの内容)。 – BMitch