Compose: docker-compose upは、Dockerfileが変更されてもイメージを再構築しません

作成日 2015年05月30日  ·  11コメント  ·  ソース: docker/compose

多くの場合、docker-compose upは、それぞれのDockerfileが変更されていても、docker-compose.ymlで「build:」として指定されたイメージを再構築しません。 代わりに、docker build -tservicename_foldernameを実行する必要があります。 影響を受けるサービスに対して手動で、それに応じて実際にイメージを更新します。

これは意図されたものですか? かなり煩わしいので、イメージが実際に最新であり、docker-composeupを使用する前に手動でdockerbuildを実行する必要があるかどうかを確認することはできません。

kinquestion

最も参考になるコメント

確かに、 docker-compose upはイメージを再構築しません。 これは「意図された」ものですが、変更する必要があると思います:#693

docker-compose buildを実行してイメージを構築できます。

#614の複製

全てのコメント11件

確かに、 docker-compose upはイメージを再構築しません。 これは「意図された」ものですが、変更する必要があると思います:#693

docker-compose buildを実行してイメージを構築できます。

#614の複製

ねえ@dnephin

docker-compose buildがコンテナを適切に再構築していないという問題が発生しています。 ロックファイルが古くなったためにVarnishコンテナが起動しないという問題が発生しています。

私が他の場所(例:#1195)で読んだものに基づくと、 docker-compose buildがコンテナーを再構築するための推奨される方法であり、このような問題を防ぐはずです。

╭─wting<strong i="11">@nuc</strong> ~/code/reddit-mobile ‹python-2.7.12› ‹wting_chan-159_add_varnish_to_2X×ad20b6d›
╰─➤  docker ps                                                                                                              2016.09.15 12:20:46 PDT 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
╭─wting<strong i="12">@nuc</strong> ~/code/reddit-mobile ‹python-2.7.12› ‹wting_chan-159_add_varnish_to_2X×ad20b6d›
╰─➤  docker-compose --version                                                                                               2016.09.15 12:20:48 PDT 
docker-compose version 1.8.0, build f3628c7
╭─wting<strong i="13">@nuc</strong> ~/code/reddit-mobile ‹python-2.7.12› ‹wting_chan-159_add_varnish_to_2X×ad20b6d›
╰─➤  docker --version                                                                                                       2016.09.15 12:20:51 PDT 
Docker version 1.12.1, build 23cf638
╭─wting<strong i="14">@nuc</strong> ~/code/reddit-mobile ‹python-2.7.12› ‹wting_chan-159_add_varnish_to_2X×ad20b6d›
╰─➤  docker-compose build && docker-compose up                                                                          2 ↵ 2016.09.15 12:23:35 PDT 
Building web
Step 1 : FROM reddit/reddit-nodejs:latest
 ---> ee57c186eb35
Step 2 : VOLUME /src
 ---> Using cache
 ---> 3720601d98c8
Step 3 : WORKDIR /src
 ---> Using cache
 ---> d4b9b360ef4e
Step 4 : EXPOSE 4444
 ---> Using cache
 ---> 5e232be73781
Step 5 : ENTRYPOINT npm start
 ---> Using cache
 ---> 1094fc9857bb
Successfully built 1094fc9857bb
Building varnish
Step 1 : FROM quay.io/reddit/varnish-fastly
# Executing 1 build trigger...
Step 1 : COPY default.vcl /etc/varnish/default.vcl
 ---> Using cache
 ---> ac9dadb35674
Step 2 : ENV VARNISH_PORTS 8080
 ---> Using cache
 ---> 3c43e0226f5f
Step 3 : EXPOSE 8080
 ---> Using cache
 ---> c88093c2ff32
Successfully built c88093c2ff32
Starting redditmobile_web_1
Starting redditmobile_varnish_1
Attaching to redditmobile_web_1, redditmobile_varnish_1
varnish_1  | storage_malloc: max size 100 MB.
varnish_1  | SHMFILE owned by running varnishd master (pid=1)  # STALE LOCK FILE
varnish_1  | (Use unique -n arguments if you want multiple instances.)
web_1      | 
web_1      | > [email protected] start /src
web_1      | > NODE_ENV=production npm run server
web_1      | 
redditmobile_varnish_1 exited with code 2
web_1      | 
web_1      | > [email protected] server /src
web_1      | > NODE_ENV=production node ./bin/ProductionServer.js
web_1      | 
web_1      | Started cluster with 4 processes.
web_1      | Started server at PID 31
web_1      | Started server at PID 46
[..]

ねえ@wting

何が起こっているのかは、ロックファイルがボリューム内にあることだと思います(https://docs.docker.com/compose/overview/#/preserve-volume-data-when-containers-are-created)。

docker-compose downを試して古いコンテナを削除すると、ボリューム参照が削除されます。 次のupは、新しいボリュームで開始する必要があります。

ボリュームに含まれていない場合は、ロックが解除されていない可能性があります。 Composeは、コンテナーが存在し、構成が変更されていない場合にコンテナーを開始しようとするため、 downを実行するとそれも修正されるはずです。

ありがとう! docker-compose downは、 docker-compose up --force-recreateと同様に機能しました(ただし、 docker-compose --buildは機能しませんdocker-compose.ymlファイルです:

version: '2'
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile.dev
    ports:
     - "4444:4444"
    volumes:
     - .:/src
  varnish:
    build:
      context: .
      dockerfile: Dockerfile.varnish
    ports:
    - "4301:80"
    depends_on:
    - web

コンテキストの場合:

wtingに感謝し、この問題について書いたすべての人に、私はあなたのコメントによって「保存」されました=>「docker-composeup --force-recreate(ただし、docker-compose --buildではありません)」。

docker-compose up --build

確かに、 docker-compose upはイメージを再構築しません。 これは「意図された」ものですが、変更する必要があると思います:#693

docker-compose buildを実行してイメージを構築できます。

#614の複製

新しいDockerfileを割り当て、最新の変更でコンテナを再構築するのに本当に役立ちました。

参考までに-説明したのと同じ問題と同じ修正がありました。 インターウェブが私をここに導きました。 良い議論をありがとう!

docker-compose up --build -V

-Vパラメータとは何かを明確にするために:
-V, --renew-anon-volumes Recreate anonymous volumes instead of retrieving data from the previous containers.

docker-compose内の単一のイメージを再構築するに

docker-compose up -d --force-recreate --no-deps --build $service

例えば:

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

このページは役に立ちましたか?
5 / 5 - 1 評価