Докер сочиняет не монтирующийся том?

Если я запускаю эту команду, том монтируется, и контейнер запускается, как и ожидалось, с инициализированным состоянием:

docker run --name gogs --net mk1net --ip 203.0.113.3 -v gogs-data:/data -d gogs/gogs

Однако, если я запускаю соответствующий docker-compose Скрипт тома не монтируется. Контейнер все еще запускается, но без состояния он читает при запуске.

  version: '3'
  services:
    gogs:
      image: gogs/gogs
      ports:
        - "3000:3000"
      volumes: 
        - gogs-data:/data
      networks: 
        mk1net:
          ipv4_address: 203.0.113.3
  volumes:
    gogs-data:
  networks:
    mk1net:
      ipam:
        config:
          - subnet: 203.0.113.0/24

Есть идеи?

1 ответ

Решение

Глядя на вашу команду, gogs-data Том был определен вне файла компоновки Docker, вероятно, используя что-то вроде:

docker volume create gogs-data

Если это так, то вам нужно указать его как внешний внутри вашего файла docker compose:

  volumes:
    gogs-data:
      external: true

Вы также можете определить другое имя для своего внешнего тома и продолжать использовать текущее имя тома в файле компоновки Docker, чтобы избежать конфликтов имен, как, например, скажем, ваш проект о продаже автомобилей, поэтому вы хотите, чтобы внешний том вызывался selling-cars-gogs-data но хочу быть проще gogs-data внутри вашего docker compose файла, тогда вы можете сделать это:

  volumes:
    gogs-data:
      external:
        name: selling-cars-gogs-data

Или даже лучше использовать переменную окружения, чтобы задать имя тома для более динамического составного дизайна докера, например:

  volumes:
    gogs-data:
      external:
        name: "${MY_GOGS_DATA_VOLUME}"

А затем начните сборку вашего докера следующим образом:

env MY_GOGS_DATA_VOLUME='selling-cars-gogs-data' docker-compose up

Надеюсь, это поможет, здесь также есть ссылка на докер для создания документации по внешним томам, если вы хотите узнать больше: https://docs.docker.com/compose/compose-file/

Вы можете сделать практически все внешнее, включая связывание контейнеров для подключения к другим контейнерам создания докеров.

Другие вопросы по тегам