У меня есть файл docker-compose.yml для WordPress. каждый раз, когда я запускаю компоновку докеров, БД пуста, и мне нужно запустить 5-этапную установку.
Я не понимаю, что мне нужно делать. У меня есть живой сайт Wordpress, я клонирую его в свой локальный, создаю файл yml.
это yml-файл.
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: '${ROOT_PASSWORD}'
MYSQL_DATABASE: '${DB_NAME}'
MYSQL_USER: '${DB_USER}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
phpmyadmin:
depends_on:
- db
image: phpmyadmin/phpmyadmin
restart: always
ports:
- '8080:80'
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: '${ROOT_PASSWORD}'
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- '8000:80'
restart: always
volumes:
- ./wp-content:/var/www/html/wp-content
environment:
WORDPRESS_DB_HOST: '${DB_HOST}'
WORDPRESS_DB_USER: '${DB_USER}'
WORDPRESS_DB_PASSWORD: '${DB_PASSWORD}'
WORDPRESS_DB_NAME: '${DB_NAME}'
volumes:
db_data:
driver: local
это то, что я вижу перед запуском docker-compose up -d
local 2d6a924b957f092ea8e0f3e468ff3057021a23be6cab1cb9a468c47b1d0afc2c
local 5e098507d458788bc9393added71e8190e5919d6cfabfe90af4d26ab7aaf8ba1
local 58ee3acf025fd46403db6f0a51f0f872c4553204482e1481571da8391c3e3203
local 75bd69c4e1ebcc050035c8c8cf2b14371855ba79351bfbcdacc0181ada27ae35
local 0673aac3c62071a3e20969620cf6a44bb0c8a580fe572da376fdeafa34ec1e48
local 732ef89d1079c69696d2ac8097765dcc691706c682440a2aba0d0cf87f02039a
local 2183d9eca34bae8d12a1dd2ae0836d1261251041eec33a390f3b6c204f58bb74
local 94070855b40779105827b48a12384e08035e20fc8d2c6325b97fc4ff8f59149e
и вот что я вижу после
DRIVER VOLUME NAME
local 2c68ba0ccf1a44e63cea5b87160138912a279161ab62561a4e41c467aeb89018
local 2d6a924b957f092ea8e0f3e468ff3057021a23be6cab1cb9a468c47b1d0afc2c
local 5e098507d458788bc9393added71e8190e5919d6cfabfe90af4d26ab7aaf8ba1
local 58ee3acf025fd46403db6f0a51f0f872c4553204482e1481571da8391c3e3203
local 75bd69c4e1ebcc050035c8c8cf2b14371855ba79351bfbcdacc0181ada27ae35
local 0673aac3c62071a3e20969620cf6a44bb0c8a580fe572da376fdeafa34ec1e48
local 732ef89d1079c69696d2ac8097765dcc691706c682440a2aba0d0cf87f02039a
local 2183d9eca34bae8d12a1dd2ae0836d1261251041eec33a390f3b6c204f58bb74
local 94070855b40779105827b48a12384e08035e20fc8d2c6325b97fc4ff8f59149e
local bz_research_db_data
что вы имеете в виду, не отображая порт 3306:3306?
Сопоставьте порт 3306 ваших локальных компьютеров с портом 3306 контейнеров БД, чтобы вы могли получить доступ к своей базе данных с локального компьютера, просто используя localhost в качестве адреса.
Ох, хорошо. Кстати, когда я написал db_data: driver: local и попытался запустить компоновку докеров, я получил эту ошибку ERROR: yaml.scanner.ScannerError: значения сопоставления здесь не разрешены
После двоеточия должен быть разрыв, я просто не могу это символизировать в комментариях. Просто ошибка структуры yaml
Хорошо, теперь это работает, но тем не менее, я установил 5 шагов :( Я обновляю сообщение обновленным файлом yml.
Как вы останавливаете свой проект (показываете всю команду, которую вы запускаете)? Изменяется ли ваше текущее имя каталога или название проекта? Что показывает docker volume ls до и после остановки проекта?
driver: local используется по умолчанию, он не нужен. А публикация порта 3306 дает людям за пределами вашего хоста доступ к БД, что не требуется, когда вы получаете доступ к БД только через другие контейнеры, а создает угрозу безопасности.
Я просто использую docker-compose down, чтобы убрать свои контейнеры. Каталог проекта отличается для разных разработчиков, но в остальном он не меняется. Мой том докера ls не меняется до и после запуска. Да, локальный драйвер используется по умолчанию, но я не видел ничего другого, что отличалось бы от моего, и да, публикация порта делает это, я не выпускал, чтобы вы не хотели, чтобы БД была доступна из-за пределов контейнера, если есть проблемы с возможностью подключения, это очень полезно.
поэтому я запускаю команду docker-compose down --volume. имя проекта/папки не меняется (я думаю). как проверить имя? Извините, я новичок в этом мире докеров :) Я редактирую пост с томом докера ls.
@MaorBar к вашему сведению, bz_research из вашего каталога. Это называется именем проекта компоновки, и его можно изменить (существуют переменные и флаги, которые использует docker-compose, но обычно по умолчанию используется имя каталога). Похоже, что это не относится к этой конкретной проблеме, однако его изменение привело бы к созданию нового/пустого именованного тома для базы данных.

Команда docker-compose down --volume имеет следующее поведение от docker-compose down --help:
Stops containers and removes containers, networks, volumes, and images
created by `up`.
By default, the only things removed are:
- Containers for services defined in the Compose file
- Networks defined in the `networks` section of the Compose file
- The default network, if one is used
Networks and volumes defined as `external` are never removed.
...
-v, --volumes Remove named volumes declared in the `volumes`
section of the Compose file and anonymous volumes
attached to containers.
Таким образом, с аргументом --volumes вы намеренно удаляете том bz_research_db_data, как вы можете видеть в своем выводе.
Решение состоит в том, чтобы вместо этого просто запустить docker-compose down, что оставит именованные тома для последующего повторного использования.
Большое спасибо за подробный ответ.
Попробуйте тома: db_data: driver: local вместо ваших томов: db_data: {}. Это единственная часть, которая кажется мне необычной, но, честно говоря, я не понимаю, почему она не должна работать. Также удивлен, увидев, что вы не сопоставляете порт 3306:3306.