Docker объем обновляется в контейнере после изменений, но в хосте ничего не происходит - PullRequest
1 голос
/ 21 марта 2020

Я использую том между хостом и контейнером для приложения flask. Веб-часть моего docker -компонента выглядит следующим образом:

  web:
    restart: on-failure
    container_name: web
    build:
      context: "."
      dockerfile: "docker/Dockerfile.web"
    ports:
      - 5000:5000
    volumes:
      - database:/var/run/postgresql
      - .:/usr/src/app
volumes:
  database:

Вот мой Dockerfile:

FROM python

WORKDIR /usr/src/app

COPY . .

RUN pip install --no-cache-dir -r requirements.txt

CMD ["python", "./sources/app.py"]

Я думаю, что мои тома хорошо созданы, потому что когда я делаю и обновляю в app.py от хоста app.py из контейнера также обновляется. Но проблема в том, что когда я перезагружаю страницу из браузера, содержимое не обновляется .

Когда я делаю docker volume list Я получил это:

DRIVER              VOLUME NAME
local               b26d14737c65ba4d26c3751ae898883e9062c4894a5fd31b191ffd9ded7f1d50
local               web-app_database

Какой объем b26d14? Я не думаю, что он создан с docker -композицией. После запуска docker volume inspect он возвращает:

[
    {
        "CreatedAt": "2020-03-21T10:41:19Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/b26d14737c65ba4d26c3751ae898883e9062c4894a5fd31b191ffd9ded7f1d50/_data",
        "Name": "b26d14737c65ba4d26c3751ae898883e9062c4894a5fd31b191ffd9ded7f1d50",
        "Options": null,
        "Scope": "local"
    }
]

Единственный способ заставить его работать - перезапустить контейнер.

Я нашел эту статью: ссылка , но это не решило мою проблему.

Docker версии:
- Docker версия 19.03.8, сборка afacb8b
- docker - составить версию 1.25.4, сборка 8d51620a

Есть идеи?

Спасибо за ответы и хорошего дня.

1 Ответ

0 голосов
/ 21 марта 2020

В комментариях мы пришли к выводу, что проблема заключалась в том, как Flask обрабатывает прямую / горячую перезагрузку и не имеет ничего общего с Docker.

Flask обеспечивает FLASK_ENV Переменная среды, которая может использоваться для включения функций разработки , таких как отладчик и автоматизированный c перегрузчик. Чтобы включить функции разработки, вам нужно установить значение development.

Docker также предоставляет удобный способ задания переменных среды с ключевым словом ENV. Все, что вам нужно сделать, это добавить следующую строку в ваш Dockerfile:

ENV FLASK_ENV=development
...