#docker #docker-compose
Вопрос:
У меня следующая структура каталогов
.
├── core
│ ├── app.py
│ ├── Dockerfile
│ └── requirements.txt
├── docker-compose.yaml
└── render
├── app.py
├── Dockerfile
└── requirements.txt
Оба Dockerfile
s содержат следующую команду
FROM python:3.9-slim-bullseye
COPY . .
RUN pip install -r requirements.txt
Для docker-compose.yaml
,
version: '3'
services:
core:
build: ./core
command:
python app.py
volumes:
- "/data:/data:rw"
render:
build: ./render
ports :
- "8080:5000"
command:
FLASK_APP=app.py flask run --host=0.0.0.0
depends_on:
- core
volumes:
- "/data:/data:ro"
Задача:
- У меня есть скрипт на python
app.py
вcore
папке, который в основном генерирует.png
файл внутриcore
{Конечного пути./core/data/ok.png
}. - Переместите этот файл на том docker
- Получите доступ к этому файлу в скрипте python
app.py
вrender
папке и отобразите его с помощью приложения flask.
Ошибка:
WARNING: Image for service render was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Recreating docker_compose_core_1 ... error
ERROR: for docker_compose_core_1 no such image: sha256:9a401c01a3bf7ed346623e9e62ad8d064d17912daf9de9871dc47c88d74475ab: No such image: sha256:9a401c01a3bf7ed346623e9e62ad8d064d17912daf9de9871dc47c88d74475ab
ERROR: for core no such image: sha256:9a401c01a3bf7ed346623e9e62ad8d064d17912daf9de9871dc47c88d74475ab: No such image: sha256:9a401c01a3bf7ed346623e9e62ad8d064d17912daf9de9871dc47c88d74475ab
ERROR: The image for the service you're trying to recreate has been removed. If you continue, volume data could be lost. Consider backing up your data before continuing.
Continue with the new image? [yN]ERROR: no such image: sha256:9a401c01a3bf7ed346623e9e62ad8d064d17912daf9de9871dc47c88d74475ab: No such image: sha256:9a401c01a3bf7ed346623e9e62ad8d064d17912daf9de9871dc47c88d74475ab
Пожалуйста, предложите исправления.
Редактировать:
После удаления всех изображений и контейнеров я запустил файл yaml и получил следующее.
WARNING: Image for service render was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating docker_compose_core_1 ... done
Creating docker_compose_render_1 ... error
ERROR: for docker_compose_render_1 Cannot start service render: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "FLASK_APP=app.py": executable file not found in $PATH: unknown
ERROR: for render Cannot start service render: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "FLASK_APP=app.py": executable file not found in $PATH: unknown
ERROR: Encountered errors while bringing up the project.
Комментарии:
1. Если вы получаете такие непонятные
no such image
ошибки, вы можете попробовать сбросить установку Docker (удалить/var/lib/docker
в Linux или использовать кнопку «сброс» в установке рабочего стола Docker). Вам придется повторно извлечь свои изображения или перестроить их из системы управления версиями.2. @DavidMaze, похоже, что-то не так с переменной окружения колбы. Не так ли?
3. Вы должны установить фиксированные переменные среды, например
FLASK_APP
, с помощью директивы DockerfileENV
, и стандартную команду контейнера с помощью DockerfileCMD
. Обычно вам не нужно переопределять его директивой Composecommand:
.
Ответ №1:
Переменная среды для flask должна быть зафиксирована в yaml
файле. Позже, когда мы вызовем команду, мы сможем использовать для нее заполнитель следующим образом.
environment:
- FLASK_APP=app.py
command: "${FLASK_APP} flask run --host=0.0.0.0"