Я столкнулся с проблемой Docker Compose на сервере Ubuntu (AWS), из-за которой не удается смонтировать локальные тома, несмотря на использование путей ${PWD}
в файле docker-compose.yml
. Установка включает в себя сайт WordPress с отдельными томами для базы данных и контента WordPress. Вот соответствующая часть моего docker-compose.yml
:
volumes:
data-db:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/storage/data-db
data-wp:
driver: local
driver_opts:
type: none
o: bind
device: ${PWD}/storage/data-wp
Я проверил, что каталоги /home/ubuntu/storage/data-db
и /home/ubuntu/storage/data-wp
существуют и имеют соответствующие разрешения:
drwxr-xr-x 2 ubuntu root 4096 Mar 31 23:08 storage/data-db
drwxr-xr-x 2 ubuntu root 4096 Mar 31 23:08 storage/data-wp
При запуске команды sudo docker-compose -f ubuntu-container-bundle.yml up -d && docker-compose -f ubuntu-container-bundle.yml logs -f
я получаю следующую ошибку:
Error response from daemon: failed to populate volume: error while mounting volume '/var/lib/docker/volumes/ubuntu_data-db/_data': failed to mount local volume: mount /storage/data-db:/var/lib/docker/volumes/ubuntu_data-db/_data, flags: 0x1000: no such file or directory
Это сбивает с толку, поскольку сообщение об ошибке предполагает, что Docker пытается подключиться по /storage/data-db
вместо указанного абсолютного пути. Для устранения неполадок я попробовал следующее:
sudo systemctl restart docker
.docker-compose.yml
нет опечаток и ошибок.--force-recreate
, чтобы принудительно воссоздать контейнеры.Несмотря на эти усилия, ошибка сохраняется. Есть ли проблема с кэшированием в Docker Compose или я что-то упускаю в конфигурации тома? Как решить эту проблему с монтажом?
Примечание: я делаю это из /home/ubuntu/
. Когда я создаю контейнер wp, просто использую простую ссылку, например:
volumes:
- ./:/var/www/html/
Это испортило мой доступ к SSH-серверу. Я провел небольшое исследование и, похоже, произошел конфликт с пользователем root - пока не уверен. В любом случае, именно поэтому я пытаюсь установить каталоги и даже пытался поместить все файлы сборки (yml и dockerfiles) в отдельный каталог (/home/ubuntu/build-files-wp
), но он также возвращает мне ту же ошибку.
Используйте .
вместо ${PWD}
.
version: '3.8'
services:
wordpress:
image: wordpress
ports:
- 8080:80
volumes:
- data-wp:/var/www/html
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=password
- WORDPRESS_DB_NAME=wordpress
db:
image: mysql:5.7
volumes:
- data-db:/var/lib/mysql
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: password
volumes:
data-db:
driver: local
driver_opts:
type: none
o: bind
device: ./storage/data-db
data-wp:
driver: local
driver_opts:
type: none
o: bind
device: ./storage/data-wp
Я так не думаю. Используйте .
, который делает то же самое.
Можно ли ссылаться на каталог на один уровень выше? Пример (AWS Ubuntu). В моем корневом каталоге есть storage
и build-files
. Внутри build-files
у меня есть docker compose и dockerfile. Я создаю образ из этого каталога, но отображаю каталог первого тома вверх. Что-то вроде: device: /../storage/data-wp
. Будет ли это работать?
Если вы хотите подняться на один уровень выше, используйте ..
вместо .
.
То есть невозможно использовать ссылку
${PWD}
внутри yml-файлов docker-compose?