Итак, я использую docker-compose
для запуска простого приложения для колб вместе с nginx.
Вот это docker-compose.yml
:
version: '3.2'
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- 80:80
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- flask
networks:
- my-network
flask:
build:
context: .
dockerfile: Dockerfile
image: webapp-flask
container_name: flask
volumes:
- type: bind
source: ./
target: /app
- type: bind
source: ./users.json
target: /app/users.json
networks:
my-network:
aliases:
- flask-app
ports:
- 8080:5000
networks:
my-network:
В разделе volumes:
я пытаюсь привязать текущий каталог хоста к каталогу /app
на хосте, а также к файлу users.json
(который я хочу синхронизировать)
Вот Dockerfile
для колбы:
FROM python:3
RUN pip install flask flask-restful
EXPOSE 5000
CMD python app/app.py
app.py
вносит изменения в users.json
по мере выполнения запросов. Все работает нормально, за исключением того факта, что при обновлении файла users.json
в контейнере (скажем, с помощью запроса) обновление не отражается на моем хост-компьютере.
Просто для информации, я использую Windows и Docker Toolbox.
Что-нибудь особенное, что мне нужно сделать, чтобы связать users.json между хостом и моим контейнером?
РЕДАКТИРОВАТЬ: Эта проблема была из-за моей собственной глупости, первая проблема заключается в том, что в моем Dockerfile
я использую изображение python:3
, а затем в docker-compose.yml
я снова использовал новое изображение webapp-flask
. Я не знаю, почему это изначально не противоречило, но, очевидно, тогда реальная проблема заключалась в том, что всякий раз, когда я запускал docker-compose up
, он использовал кэшированную сборку моих старых файлов и никогда не перестраивал контейнер. Я понял это, когда внес изменения в свой app.py
, и они не вступили в силу при запуске всего этого. Итак, все, что я сделал, это удалил старые контейнеры, удалил строку, где он указывает изображение в docker-compose.yml
, и это сработало.