Файл не синхронизируется от контейнера к хосту в docker-compose - PullRequest
0 голосов
/ 29 июня 2019

Итак, я использую 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, и это сработало.

1 Ответ

1 голос
/ 29 июня 2019

Акханд Мишра ,

Несколько вопросов:

  • Где находится файл users.json на вашей хост-системе? Это вне вашей директории приложения? (Если нет, то)
  • Есть ли причина, по которой конфигурация тома не может быть упрощена для привязки всего каталога приложения к контейнеру? Похоже, вы уже делаете это, но также привязываете файл users.json в качестве дополнительной цели.

Я бы порекомендовал создать на вашем хосте дополнительный каталог /data/, который мог бы использоваться для размещения файла users.json. Итак, что-то вроде этого в вашем docker-compose.yml:

flask:
    build:
        context: .
        dockerfile: Dockerfile
    image: webapp-flask
    container_name: flask
    volumes:
        - .:/app/
        - .:/data/
    networks:
        my-network:
            aliases:
                - flask-app
    ports:
        - 8080:5000

Я не уверен, что тома можно подключить к явному единственному файлу с помощью compose, и подозреваю, что это может быть целый каталог, который вызывается в ключах тома yaml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...