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


218

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は実行中のすべてのコンテナを強制終了するわけではありません。


4
docker-compose up --build
Jinna Balu

回答:


232

docker-compose up

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

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

--build-コンテナーを開始する前にイメージをビルドします。


19
docker-compose build service1 service2 --no-cache この仕事をよりよくします(github.com/docker/compose/issues/1049)。使用前にビルドされたキャッシュコンテナーに問題があった docker-compose up -d --no-deps --build <service_name>
evgpisarchik

32
@evgpisarchik注文は少しずれているはずですdocker-compose build --no-cache service1 service2
Matthew Wilcoxson '27 / 03/27

180

docker-compose 1.19を使用 up

docker-compose up --build --force-recreate --no-deps [-d] [<service_name>..]

1つ以上のservice_name引数がない場合、すべてのコンテナが再構築されます

ヘルプメニューから

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

4
これが質問にどのように答えるか混乱しています。1つのコンテナーだけを再構築するにはどうすればよいですか?
Duncan Jones、

11
コマンドの最後に名前を追加すると、1つのコンテナーのみを再構築できます。docker-compose up -d --force-recreate --build container_name
HarlemSquirrel

少し待ってください。これコンテナを再作成build --no-cacheます。コマンドの説明が完全に間違っていない限り、これはオプションと同じではありません
スレーブ

67

これで問題が解決するはずです。

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 

12
あなたがしたい場合stoprm、すべてのコンテナその後、次のコマンドを使用することができますdocker-compose down。あなたがいくつかを取り除きたいだけならあなたの解決策はより良いです。
hirowatari 2016年

このソリューションは、あなたが全体のドッキングウィンドウのアプリケーションとサービスのほんの再作成1を停止したくない設定に適している
bluesummers

変更されたDockerfileを再構築するdocker-compose build <id/name>upに、実際に実行する必要がありました。
Vajk Hermecz

49

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

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

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.

9

たぶんこれらの手順は完全に正しくないかもしれませんが、私はこれが好きです:

docker composeを停止します。 $ docker-compose down

コンテナを削除します。 $ docker system prune -a

docker composeを開始します。 $ docker-compose up -d


4

単に使用する:

docker-compose build [yml_service_name]

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


2

問題は:

$ 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

1

私にとっては、との両方でDocker Hubから新しい依存関係のみを取得しました(--no-cacheおよび--pullで利用可能)docker-compose build

# other steps before rebuild
docker-compose build --no-cache --pull nginx # rebuild nginx
# other steps after rebuild, e.g. up (see other answers)

0
docker-compose stop nginx # stop if running
docker-compose rm -f nginx # remove without confirmation
docker-compose build nginx # build
docker-compose up -d nginx # create and start in background

rmでコンテナを削除することは不可欠です。削除しないと、Dockerは古いコンテナを起動します。


-9

のみ:

$ docker-compose restart [yml_service_name]

4
これは新しい変更を構築しません。マニュアルから-docker-compose.yml設定に変更を加えた場合、これらの変更はこのコマンドの実行後に反映されません。
2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.