Докер сочиняет не монтирующийся том?
Если я запускаю эту команду, том монтируется, и контейнер запускается, как и ожидалось, с инициализированным состоянием:
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/
Вы можете сделать практически все внешнее, включая связывание контейнеров для подключения к другим контейнерам создания докеров.