#docker #docker-compose #yaml
Вопрос:
Это очень простой вопрос, я думаю, но я не мог найти ответа. Это мой докер-compose.yml
version: '3'
services:
db:
volumes:
- db:/var/lib/mysql
volumes:
db:
nextcloud:
Вопрос в том, что я хочу указать значение «db» или «nextcloud» в разделе «тома» и ссылаться на них в разделе «Службы».подобный этому
services:
db:
volumes:
- db:/var/lib/mysql
nextcloud:
volumes:
- nextcloud:/var/www/html
volumes:
db: /home/roj/DataDisk/nextcloud-insecure/db
nextcloud: /home/roj/DataDisk/nextcloud-insecure/disk
но у меня есть проблема ERROR: In file './docker-compose.yml', volume 'db' must be a mapping not a string.
как я могу это исправить ?
Ответ №1:
Раздел верхнего уровня volumes
предназначен не для указания монтирования, а для настройки драйвера тома (см. Официальную документацию по этому вопросу). т. е. это неверно
volumes:
db: /home/roj/DataDisk/nextcloud-insecure/db # incorrect
nextcloud: /home/roj/DataDisk/nextcloud-insecure/disk # incorrect
Если вы хотите смонтировать каталоги хостов в свой контейнер, вы должны указать это в volumes
разделе вашего services
, например.
services:
db:
volumes:
- /home/roj/DataDisk/nextcloud-insecure/db:/var/lib/mysql
nextcloud:
volumes:
- /home/roj/DataDisk/nextcloud-insecure/disk:/var/www/html
Дополнительную информацию об этом см. в официальной документации по объемам услуг.
Ответ №2:
Ваш синтаксис во внешней volumes
инструкции неверен.
Если вы хотите подключиться к тому, управляемому докером, выполните это:
services:
test:
image: alpine
volumes:
- db:/app
volumes:
db:
Если вы хотите подключиться к локальному пути, сделайте это (вы можете заменить точку на .:/app
любой другой локальный путь, например: /home/you:/server/path
):
services:
test:
image: alpine
volumes:
- .:/app
Если он начинается с точки или косой черты, он будет рассматриваться как путь, в противном случае как именованный том, управляемый докером.
Это распространенные шаблоны использования, но вы можете прочитать больше о томах в разделе compose для получения дополнительной информации.