Данные также копируются в контейнер python, но вы скрываете эти данные с помощью монтирования привязки.
Сначала вы копируете файлы в /usr/src/FlaskApp/code
в вашем Dockerfile, но затем вы создаете монтирование привязки в в том же месте, что означает, что /usr/src/
теперь будет содержать только содержимое ./flask/flask-data
, которое находится на вашем локальном хосте (источнике привязки).
В результате вы получите /usr/src/<contents of ./flask/flask-data>
, поэтому, если ./flask/flask-data
на вашем локальном хосте не содержит файла __init__.py
(и всей подструктуры каталогов, необходимой вашему приложению), то и контейнер не будет.
Таким образом, все эти строки в вашем Dockerfile в основном не имеет значения, пока вы используете это bind mount
RUN mkdir /usr/src/FlaskApp
RUN mkdir /usr/src/FlaskApp/code
WORKDIR /usr/src/FlaskApp/code
COPY ./code ./
COPY FlaskApp.wsgi /usr/src/FlaskApp/
Я не уверен, что именно вы пытаетесь достичь и как ваше приложение разрешает пути, но быстрое исправление будет заключаться в создании другой папки под /usr/src
(возможно, /usr/src/FlaskData
) и смонтируйте туда локальный каталог.
volumes:
- "./flask/flask-data:/usr/src/FlaskData"
Теперь в вашем /usr/src
будут и FlaskApp
, и FlaskData
, но вы r потребуется соответственно обновить пути к файлам в вашем приложении.
из Docker docs
Подключить в непустой каталог на контейнер
Если вы выполняете привязку-монтирование в непустой каталог в контейнере, существующее содержимое каталога скрывается привязкой монтирования. Это может быть полезно, например, когда вы хотите протестировать новую версию своего приложения без создания нового образа. Однако это также может быть неожиданным, и это поведение отличается от поведения docker томов.
И чтобы ответить, почему привязка mount ведет себя по-другому для MySQL контейнера - это не так.
Вы монтируете пустую папку в место, где данные записываются MySQL только после запуска контейнера, поэтому там нечего скрывать, потому что место назначения пусто для начала (то же самое относится к python, если вы напишете что-нибудь в /usr/src
после запуска контейнера, вы увидите, что эти данные появятся на локальном хосте в ./flask/flask
).