2017-04-26 134 views
0

我有一些容器与docker组合运行,但我无法找到一种方法来正确更新我的容器,而无需删除它并再次创建它。我有一个Python应用程序,我可以成功地部署代码更改并获得应用程序,但是如果我添加了像css,js或图像那样的文件,则无法访问容器。Docker撰写没有更新内容

我试图用这个命令,即使在控制台它记录如预期(不带缓存重建它)的消息我没有没有成功:

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 

这里是我做克尔-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 

回答

0

你的码头工人撰写的文件显示,你在web容器命名卷。是/usr/src/app/donare/static你的CSS,JS和图像应该来自你的Docker主机?如果是这样,也许你打算将/usr/src/app/donare/static装入你的容器,而不是创建一个具有该名称的卷?或者,如果css,js和图像内置到图像中,那么您应该删除该命名的卷。

假设你的CSS,JS和图片是在容器的路径/usr/src/app/donare/static,然后发生的事情是,因为你有一个名为体积那里,你第一次运行web服务,正在创建一个卷和初始化与该路径上的内容。每当您执行buildup时,您的旧文件的路径上都会安装相同的初始卷。当您stoprm时,卷也被隐式删除,导致它被重新创建并用新文件初始化。