Совместное использование данных между контейнерами с помощью docker-создание и объем

#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"
 

Задача:

  1. У меня есть скрипт на python app.py в core папке, который в основном генерирует .png файл внутри core {Конечного пути ./core/data/ok.png }.
  2. Переместите этот файл на том docker
  3. Получите доступ к этому файлу в скрипте 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 , с помощью директивы Dockerfile ENV , и стандартную команду контейнера с помощью Dockerfile CMD . Обычно вам не нужно переопределять его директивой Compose command: .

Ответ №1:

Переменная среды для flask должна быть зафиксирована в yaml файле. Позже, когда мы вызовем команду, мы сможем использовать для нее заполнитель следующим образом.

 environment:
        - FLASK_APP=app.py

command: "${FLASK_APP} flask run --host=0.0.0.0"