Docker撰写不更新内容

时间:2017-04-26 19:50:21

标签: docker docker-compose dockerfile docker-machine

我有一些使用docker compose运行的容器,但我无法找到一种方法来正确更新我的容器而不必删除它并再次创建它。我有一个Python应用程序,我可以成功部署代码更改和那些应用程序,但如果我添加像css,js或图像的文件,那些不会到达容器。

我已尝试使用此命令,即使在控制台中它按预期记录消息(重建它没有缓存)我没有成功:

docker-compose build --no-cache web && docker-compose up -d

对我有用的唯一命令是将其删除:

docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q) && docker rmi $(docker images -a -q)

然后构建和部署:

docker-compose build && docker-compose up -d

这是我的docker-compose.yml:

web:
  restart: always
  build: ./web
  expose:
    - "8000"
  links:
    - postgres:postgres
    - redis
  volumes:
    - /usr/src/app/donare/static
  env_file: .env
  command: /usr/local/bin/gunicorn -w 2 -b :8000 --limit-request-line 16384 donare.app:app

nginx:
  restart: always
  build: ./nginx/
  ports:
    - "80:80"
  volumes:
    - /www/static
  volumes_from:
    - web
  links:
    - web:web

data:
  restart: always
  image: postgres:latest
  volumes:
    - /var/lib/postgresql
  command: "true"

postgres:
  restart: always
  build: .
  dockerfile: dockerfile-postgres
  volumes_from:
    - data
  ports:
    - "5432:5432"

redis:
  image: redis

celery:
  build: ./web
  command: celery worker --app=donare.tasks.tasks
  volumes:
    - .:/code
  links:
    - postgres
    - redis

1 个答案:

答案 0 :(得分:0)

您的Docker Compose文件显示您在web容器中有一个命名卷。 /usr/src/app/donare/static您的css,js和图像应该来自Docker主机吗?如果是这样,也许您打算将/usr/src/app/donare/static挂载到容器中,而不是创建具有该名称的卷?或者,如果css,js和images已内置到您的图像中,那么您应该只删除该命名卷。

假设您的css,js和images位于容器中的路径/usr/src/app/donare/static,那么正在发生的是因为您有一个命名卷,第一次运行web服务时,正在使用该路径中的内容创建和初始化卷。每次执行buildup时,都会在旧文件的路径中装入相同的初始卷。当您stoprm时,该卷也会被隐式删除,从而导致重新创建并使用新文件进行初始化。