我有一些使用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发布于 2017-04-27 04:46:35
Docker编写文件显示web容器中有一个已命名的卷。在你的/usr/src/app/donare/static主机上,你的css、js和图片应该来自/usr/src/app/donare/static吗?如果是这样的话,也许您打算将/usr/src/app/donare/static挂载到容器中,而不是创建一个具有该名称的卷?或者,如果css、js和图像内置于您的映像中,那么您可能应该删除该命名卷。
假设您的css、js和图像位于容器中的路径/usr/src/app/donare/static,那么发生的情况是,因为您在那里有一个已命名的卷,所以当您第一次运行web服务时,将使用该路径上的内容创建并初始化一个卷。每次执行build和up时,相同的初始卷与旧文件一起挂载在path中。当您执行stop和rm操作时,卷也会被隐式删除,从而导致使用新文件重新创建和初始化该卷。
https://stackoverflow.com/questions/43643338
复制相似问题