Compose: 尽管Dockerfile已更改,但docker-compose up不会重建映像

创建于 2015-05-30  ·  11评论  ·  资料来源: docker/compose

尽管相应的Dockerfile已更改,但通常docker-compose up不会重建在docker-compose.yml中指定为“ build:”的映像。 相反,我需要运行docker build -t servicename_foldername。 手动为受影响的服务提供服务,该服务实际上将相应地更新映像。

这是故意的吗? 因为这很烦人,所以我永远无法确定该映像实际上是最新的,并且需要在使用docker-compose之前手动运行docker build。

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-created)。

您可以尝试docker-compose down删除旧的容器,这将删除卷引用。 下一个up应该从新卷开始。

如果它不在一个卷中,我想那可能只是该锁从未被删除过。 如果容器存在且配置未更改,则Compose会尝试启动该容器,因此运行down应解决该问题。

谢谢! docker-compose downdocker-compose up --force-recreate (但不是docker-compose --build )都起作用。 我想这是不直观的,因为为Web容器而不是Varnish容器安装了一个卷; 但是清漆文件仍然存在。 这是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-compose up --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 等级