Как смонтировать абсолютный путь к хосту в качестве именованного тома в docker-compose?

Я уже пробовал решение в этом потоке stackoverflow. У меня это не сработало, как показано ниже.

Вот мой docker-compose.yml файл:

version: "3.7"
services:
  db:
    image: mysql
    volumes:
     - data:/var/lib/mysql

volumes:
  data:
    driver_opts:
      type: none
      device: /usr/local/opt/mysql/mywebsite.com
      o: bind  

Вот результат docker-compose up:

$ docker-compose up
Creating volume "mycontainer_data" with default driver
Recreating 45bc03b2c674_mycontainer_db_1 ... error

ERROR: for 45bc03b2c674_mycontainer_db_1  Cannot create container for service db: error while mounting volume with options: type='none' device='/usr/local/opt/mysql/mywebsite.com' o='bind': no such file or directory

ERROR: for db  Cannot create container for service db: error while mounting volume with options: type='none' device='/usr/local/opt/mysql/mywebsite.com' o='bind': no such file or directory
ERROR: Encountered errors while bringing up the project.

Вместо type: none я также пробовал type: volume и type: bind, но получил ту же ошибку.

Каталог явно существует:

$ ls -al /usr/local/opt/mysql/
...
drwxr-xr-x   2 cameronhudson  staff      64 Jun 10 10:32 mywebsite.com
...


person Cameron Hudson    schedule 10.06.2019    source источник


Ответы (1)


Было 2 причины, по которым моя конфигурация не работала.

Во-первых, Docker не использует символические ссылки, а каталог mysql является символической ссылкой:

$ ls -al /usr/local/opt | grep mysql
lrwxr-xr-x    1 cameronhudson  admin    22 Jan 23 17:42 mysql -> ../Cellar/mysql/8.0.13

Однако даже после использования пути без каких-либо символических ссылок, /databases/mywebsite.com, я продолжал испытывать ту же ошибку no such file or directory.

Я обнаружил, что если я изменил свой файл docker-compose.yml, чтобы смонтировать этот каталог как безымянный том, я получил другую, более разумную ошибку:

version: "3.7"
services:
  db:
    image: mysql
    volumes:
     - /databases/mywebsite.com:/var/lib/mysql

Новая ошибка:

ERROR: for mycontainer_db_1  Cannot start service db: b'Mounts denied: \r\nThe path /databases/mywebsite.com\r\nis not shared from OS X and is not known to Docker.\r\nYou can configure shared paths from Docker -> Preferences... -> File Sharing.\r\nSee https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.\r\n.'

После того, как я добавил этот путь в Docker Desktop, я смог up использовать службы, используя исходную конфигурацию. Это также работало с type: none, type: volume, type: bind или вообще без type.

person Cameron Hudson    schedule 10.06.2019
comment
Что вы имеете в виду, добавив этот путь в Docker Desktop? - person Slav; 06.02.2020
comment
@Slav Docker Desktop — это пакет от Docker. При его установке устанавливаются интерфейс командной строки docker и демон. Подробнее здесь: docker.com/products/docker-desktop. - person Cameron Hudson; 07.02.2020
comment
Да, у меня установлен Docker Desktop. Он показывает запущенные контейнеры и позволяет запускать/останавливать/удалять/проверять их. Где в Docker Desktop можно добавить путь к тому? - person Slav; 07.02.2020
comment
@Slav Docker Desktop -> Настройки -> Ресурсы -> Общий доступ к файлам - person Cameron Hudson; 07.02.2020