Docker Compose для контейнеров WordPress не может смонтировать локальные тома с путями ${PWD} в Ubuntu/AWS

Я столкнулся с проблемой 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 вместо указанного абсолютного пути. Для устранения неполадок я попробовал следующее:

  • Проверил, что указанные каталоги существуют и имеют правильные разрешения.
  • Удаление использованного тома Docker для очистки неиспользуемых томов.
  • Перезапустил службу Docker с помощью 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), но он также возвращает мне ту же ошибку.

Конфигурация

  • АВС
  • Убунту 22.04
  • Докер версии 26.0.0
  • Docker Compose версия v2.26.1
Как убрать количество товаров в категории WooCommerce
Как убрать количество товаров в категории WooCommerce
По умолчанию WooCommerce показывает количество товаров рядом с категорией, как показано ниже.
1
0
215
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте . вместо ${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

То есть невозможно использовать ссылку ${PWD} внутри yml-файлов docker-compose?

Jorge Mauricio 01.04.2024 19:45

Я так не думаю. Используйте ., который делает то же самое.

datawookie 02.04.2024 08:44

Можно ли ссылаться на каталог на один уровень выше? Пример (AWS Ubuntu). В моем корневом каталоге есть storage и build-files. Внутри build-files у меня есть docker compose и dockerfile. Я создаю образ из этого каталога, но отображаю каталог первого тома вверх. Что-то вроде: device: /../storage/data-wp. Будет ли это работать?

Jorge Mauricio 05.05.2024 00:36

Если вы хотите подняться на один уровень выше, используйте .. вместо ..

datawookie 06.05.2024 15:10

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