web-dev-qa-db-ja.com

Docker-compose.ymlでdockerコンテナを再構築する方法は?

Docker-compose.ymlで定義されているサービスの範囲があります。これらのサービスは開始されました。これらのうち1つだけを再構築し、他のサービスを起動せずに起動する必要があります。私は以下のコマンドを実行します。

docker-compose up -d # run all services
docker-compose stop nginx # stop only one. but it still running !!!
docker-compose build --no-cache nginx 
docker-compose up -d --no-deps # link nginx to other services

最後に私は古いnginxコンテナを手に入れました。ちなみにdocker-composeは実行中のコンテナすべてを殺すわけではありません。

113
yuklia

docker-compose up

$docker-compose up -d --no-deps --build <service_name>

--no-deps - リンクサービスを開始しません。

--build - コンテナを起動する前にイメージを構築します。

132
denov

Docker-compose 1.19を使って

docker-compose up -d --force-recreate --build

ヘルプメニューから

Options:
  -d                  Detached mode: Run containers in the background,
                      print new container names. Incompatible with
                      --abort-on-container-exit.
  --force-recreate    Recreate containers even if their configuration
                      and image haven't changed.
  --build             Build images before starting containers.
74
HarlemSquirrel

これで問題は解決します。

docker-compose ps # lists all services (id, name)
docker-compose stop <id/name> #this will stop only the selected container
docker-compose rm <id/name> # this will remove the docker container permanently 
docker-compose up # builds/rebuilds all not already built container 
35
ArgonQQ

@HarlemSquirrelが投稿したように、それは最高であり、私は正しい解決策だと思います。

しかし、OP固有の問題に答えるには、docker-compose.ymlファイルにすべてのサービスを再作成するのではなく、nginxのみを再作成する必要があるため、次のようなコマンドを実行する必要があります。

docker-compose up -d --force-recreate --no-deps --build nginx

オプションの説明

Options:
  -d                  Detached mode: Run containers in the background,
                      print new container names. Incompatible with
                      --abort-on-container-exit.
  --force-recreate    Recreate containers even if their configuration
                      and image haven't changed.
  --build             Build images before starting containers.
  --no-deps           Don't start linked services.
19
Slavik Meltser

問題は:

$ docker-compose stop nginx

動作しませんでした(あなたはそれがまだ実行されていると言いました)。あなたがとにかくそれを再構築しようとしているなら、あなたはそれを殺してみることができます:

$ docker-compose kill nginx

それでもうまくいかない場合は、dockerで直接やめてみてください。

$ docker stop nginx

または削除する

$ docker rm -f nginx

それでもうまくいかない場合は、dockerのバージョンを確認してください。アップグレードすることをお勧めします。

それはバグかもしれません、あなたはそれがあなたのシステム/バージョンと一致するかどうかチェックすることができます。ここに例があります、 https://github.com/docker/docker/issues/10589

https://github.com/docker/docker/issues/12738

回避策として、プロセスを強制終了することができます。

$ ps aux | grep docker 
$ kill 225654 # example process id
2
user2707671

単に使用します:

docker-compose build [yml_service_name]

[yml_service_name]ファイルのdocker-compose.ymlをサービス名に置き換えます。 docker-compose restartを使用して、変更が有効であることを確認できます。 --no-cacheを使用して、キャッシュを無視できます。

1
FarhadMohseni