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は実行中のコンテナすべてを殺すわけではありません。
$docker-compose up -d --no-deps --build <service_name>
--no-deps - リンクサービスを開始しません。
--build - コンテナを起動する前にイメージを構築します。
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.
これで問題は解決します。
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
@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.
問題は:
$ 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
単に使用します:
docker-compose build [yml_service_name]
[yml_service_name]
ファイルのdocker-compose.yml
をサービス名に置き換えます。 docker-compose restart
を使用して、変更が有効であることを確認できます。 --no-cache
を使用して、キャッシュを無視できます。