2017-04-26 133 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時,卷也被隱式刪除,導致它被重新創建並用新文件初始化。