Dockerはビルドアップを失敗してコンテナを更新する
変更後のサービスを更新するには以下のコマンドを試してみてください.
公式文書docker-compose up )
私たちがイメージの一部であるファイルを変えた後に、私たちが予想するもの 画像の再構築 変更されていない部品の再構築を避けるためにキャッシュを使用する 新画像に基づくコンテナの再起動 このコマンドを提案するWeb上には多くの場所があります.問題を掘り下げてみると、その背後にある理由は匿名のボリュームであることがわかった.
解決策
匿名ボリュームで問題を修正するには
他に選択肢がある
匿名ボリュームの背後にあるもの
既存のanonボリュームをチェック
このコマンドを使用して置換
どのように、私はそのようなボリュームをつくりますか?
a . dockerが構成されます.気象研
我々が公式ドキュメンテーションを見るならばVOLUME 我々は、どんな手がかりも見つけません:
詳細を説明するには、問題をシミュレートする例が必要です.
https://github.com/aheissenberger/docker-anon-volumes
src/hello world当社のサービスアプリ
と新しい設定でサービスを再起動します
サービスの出力を確認します.
匿名ボリュームのチェック
コンテナのIDを取得する
コマンドを実行して、コンテナIDでボリュームを一覧表示します
現在、我々は我々を変えます
src/dockerfile
サービスの出力を確認します.
新しい設定でサービスを再起動します
サービスの出力を確認します.
匿名のボリュームをチェックします.
コンテナのIDを取得する
コマンドを実行して、コンテナIDでボリュームを一覧表示します 我々は匿名のボリュームを我々のコンテナに接続している コンテナID 匿名ボリュームの内容を
固定 削除する 追加
これが起こる理由は、サードパーティのイメージを消費し、このイメージのエクスポートされたボリュームをチェックしたことがないことです.このイメージをコントロールしていないので、これを修正する方法はありません.
オプション2を試してみましょう):
ファイルの内容を変更する
docker compose -f docker-compose.prod.yml up --build --no-deps --detach your_service
このコマンドが何をするかを説明しましょう.up
サービスを開始するyour_service
--build
それが存在しないか、変わったならば、イメージを構築してください.変更されていない部分にキャッシュを使用します.--no-deps
関連するサービスを開始しない--detach
コンテナをバックグラウンドで実行する公式文書docker-compose up )
解決策
匿名ボリュームで問題を修正するには
--renew-anon-volumes
:docker compose -f docker-compose.prod.yml up --build --no-deps --renew-anon-volumes --detach your_service
追加のフラグは、このサービスの再起動時にすべての匿名ボリュームを再作成します.これは、これらのボリュームと表示されるように変更を重複させる.他に選択肢がある
--force-recreate
これは解決策であることを示唆していますが、変更についての匿名ボリュームマッピングの問題を解決しません.匿名ボリュームの背後にあるもの
既存のanonボリュームをチェック
このコマンドを使用して置換
<your container id>
コンテナIDを指定します.docker inspect --type container -f '{{range $i, $v := .Mounts }}{{printf "%v\n" $v}}{{end}}' <your container id>
すべての匿名のボリュームは、直接{volume
:{volume 277654df19e38eeb10f92be90c8df76558033bcd3c7b871e75abdc14174a46d8 /var/lib/docker/volumes/277654df19e38eeb10f92be90c8df76558033bcd3c7b871e75abdc14174a46d8/_data /opt/app/etc local true }
どのように、私はそのようなボリュームをつくりますか?
a . dockerが構成されます.気象研
services:
your_service:
build: .
volumes:
- /my_data # anonymous volume
dockerfileVOLUME "/var/logs" "/data"
私たちは通常、ボリューム名と匿名ボリュームを使用するだけで我々のdocker-compose.yml
オプションのファイルにフォーカスします.我々が公式ドキュメンテーションを見るならばVOLUME 我々は、どんな手がかりも見つけません:
The
VOLUME
instruction creates a mount point with the specified name and marks it as holding externally mounted volumes from native host or other containers. The…
詳細を説明するには、問題をシミュレートする例が必要です.
src
config
name.txt
hello-world.sh
Dockerfile
docker-compose.yml
このリポジトリからこれらのファイルをクローン化できます.https://github.com/aheissenberger/docker-anon-volumes
src/hello world当社のサービスアプリ
#!/bin/sh
NAME=$(cat /app/config/name.txt)
while sleep 5; do echo "Hello World! Hello $NAME"; done
src/config/name設定ファイルMax
src/dockerfileFROM alpine
COPY hello-world.sh /app/hello-world.sh
COPY config/name.txt /app/config/name.txt
CMD \["sh","/app/hello-world.sh"\]
Dockerの作成気象研services:
hello:
build: ./src
サービスを開始できます.docker compose up --detach
ヒント:Dockerの最新バージョンを持っていない場合は、置換する必要がありますdocker compose
with docker-compose
言葉の間のダッシュで!Creating network "docker-anon-volumes_default" with the default driver
Building hello
[+] Building 2.0s (8/8) FINISHED
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
WARNING: Image for service hello was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating docker-anon-volumes_hello_1 ... done
Attaching to docker-anon-volumes_hello_1
hello_1 | Hello World! Hello Max
hello_1 | Hello World! Hello Max
サービスの出力を確認します.$ docker compose logs -f
hello_1 | Hello World! Hello Max
hello_1 | Hello World! Hello Max
hello_1 | Hello World! Hello Max
...
ファイル内のコンテンツを変更するsrc/config/name.txt
からMax
to Rudi
echo "Rudi">src/config/name.txt
と新しい設定でサービスを再起動します
docker compose up --build --no-deps --detach
サービスの出力を確認します.
$ docker compose logs -f
hello_1 | Hello World! Hello Rudi
hello_1 | Hello World! Hello Rudi
...
まさに我々が期待したこと.匿名ボリュームのチェック
コンテナのIDを取得する
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1df0f6ee87d4 1c356deb72b1 "sh /app/hello-world…" 40 seconds ago Up 37 seconds docker-anon-volumes_hello_1
1df0f6ee87d4
からdocker ps
$ docker inspect --type container -f '{{range $i, $v := .Mounts }}{{printf "%v\n" $v}}{{end}}' 1df0f6ee87d4
このコマンドによる出力はないはずです.現在、我々は我々を変えます
Dockerfile
オプションでバインドするapp/config
ディレクトリをローカルディレクトリに追加することによってVOLUME
コマンド.src/dockerfile
FROM alpine
COPY hello-world.sh /app/hello-world.sh
COPY config/name.txt /app/config/name.txt
VOLUME /app/config
CMD \["sh","/app/hello-world.sh"\]
新しい設定でサービスを再起動しますdocker compose up --build --no-deps --detach
サービスの出力を確認します.
$ docker compose logs -f
hello_1 | Hello World! Hello Rudi
hello_1 | Hello World! Hello Rudi
...
ファイル内のコンテンツを変更するsrc/config/name.txt
からRudi
to Franz
echo "Franz">src/config/name.txt
新しい設定でサービスを再起動します
docker compose up --build --no-deps --detach
サービスの出力を確認します.
$ docker compose logs -f
hello_1 | Hello World! Hello Rudi
hello_1 | Hello World! Hello Rudi
...
This is not what we expected!
匿名のボリュームをチェックします.
コンテナのIDを取得する
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2419dd47277a 696b927fee44 "sh /app/hello-world…" About a minute ago Up About a minute docker-anon-volumes_hello_1
2419dd47277a
からdocker ps
$ docker inspect --type container -f '{{range $i, $v := .Mounts }}{{printf "%v\n" $v}}{{end}}' 2419dd47277a
{volume c62baf7300ddc9dc66a7e871d6511e5e3a6274072cc20c3f14bb59bca5319935 /var/lib/docker/volumes/c62baf7300ddc9dc66a7e871d6511e5e3a6274072cc20c3f14bb59bca5319935/_data /app/config local rw true }
何を得るのですかvolume c62baf7300ddc9dc66a7e871d6511e5e3a6274072cc20c3f14bb59bca5319935
2419dd47277a
以前とは違う1df0f6ee87d4
. これは新しいコンテナですname.txt
/app/config
ディレクトリと古いファイルを持つ新しいコンテナーを重ねる固定
VOLUME
コマンド--renew-anon-volumes
あなたにup --build
to recreate this anonymous volume オプション2を試してみましょう):
ファイルの内容を変更する
src/config/name.txt
からFranz
to Hans
echo "Hans">src/config/name.txt
私たちは、イメージが既に名前=フランツでつくられたので、我々がこれをする必要があります、そして、再構築は、コンテナを再現しないか、匿名のボリュームのレクリエーションでないUpコマンドに何がつながるかを検出して、変えませんdocker compose up --build --no-deps --detach --renew-anon-volumes
サービスの出力を確認します.$ docker compose logs -f
hello_1 | Hello World! Hello Hans
hello_1 | Hello World! Hello Hans
...
これが最初から予想されたことです.Reference
この問題について(Dockerはビルドアップを失敗してコンテナを更新する), 我々は、より多くの情報をここで見つけました https://dev.to/aheissenberger/docker-compose-up-build-fails-to-update-container-2pidテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol