Каждый раз, когда я запускаю docker-compose up для WordPress, БД пуста

У меня есть файл 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

Попробуйте тома: db_data: driver: local вместо ваших томов: db_data: {}. Это единственная часть, которая кажется мне необычной, но, честно говоря, я не понимаю, почему она не должна работать. Также удивлен, увидев, что вы не сопоставляете порт 3306:3306.

Shardj 21.05.2019 13:23

что вы имеете в виду, не отображая порт 3306:3306?

Maor Bar 24.05.2019 13:19

Сопоставьте порт 3306 ваших локальных компьютеров с портом 3306 контейнеров БД, чтобы вы могли получить доступ к своей базе данных с локального компьютера, просто используя localhost в качестве адреса.

Shardj 24.05.2019 13:21

Ох, хорошо. Кстати, когда я написал db_data: driver: local и попытался запустить компоновку докеров, я получил эту ошибку ERROR: yaml.scanner.ScannerError: значения сопоставления здесь не разрешены

Maor Bar 24.05.2019 13:22

После двоеточия должен быть разрыв, я просто не могу это символизировать в комментариях. Просто ошибка структуры yaml

Shardj 24.05.2019 13:25

Хорошо, теперь это работает, но тем не менее, я установил 5 шагов :( Я обновляю сообщение обновленным файлом yml.

Maor Bar 24.05.2019 13:50

Как вы останавливаете свой проект (показываете всю команду, которую вы запускаете)? Изменяется ли ваше текущее имя каталога или название проекта? Что показывает docker volume ls до и после остановки проекта?

BMitch 24.05.2019 14:31

driver: local используется по умолчанию, он не нужен. А публикация порта 3306 дает людям за пределами вашего хоста доступ к БД, что не требуется, когда вы получаете доступ к БД только через другие контейнеры, а создает угрозу безопасности.

BMitch 24.05.2019 14:33

Я просто использую docker-compose down, чтобы убрать свои контейнеры. Каталог проекта отличается для разных разработчиков, но в остальном он не меняется. Мой том докера ls не меняется до и после запуска. Да, локальный драйвер используется по умолчанию, но я не видел ничего другого, что отличалось бы от моего, и да, публикация порта делает это, я не выпускал, чтобы вы не хотели, чтобы БД была доступна из-за пределов контейнера, если есть проблемы с возможностью подключения, это очень полезно.

Shardj 24.05.2019 15:26

поэтому я запускаю команду docker-compose down --volume. имя проекта/папки не меняется (я думаю). как проверить имя? Извините, я новичок в этом мире докеров :) Я редактирую пост с томом докера ls.

Maor Bar 24.05.2019 18:14

@MaorBar к вашему сведению, bz_research из вашего каталога. Это называется именем проекта компоновки, и его можно изменить (существуют переменные и флаги, которые использует docker-compose, но обычно по умолчанию используется имя каталога). Похоже, что это не относится к этой конкретной проблеме, однако его изменение привело бы к созданию нового/пустого именованного тома для базы данных.

BMitch 24.05.2019 18:48
Как убрать количество товаров в категории WooCommerce
Как убрать количество товаров в категории WooCommerce
По умолчанию WooCommerce показывает количество товаров рядом с категорией, как показано ниже.
1
11
666
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Команда 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, что оставит именованные тома для последующего повторного использования.

Большое спасибо за подробный ответ.

Maor Bar 24.05.2019 20:40

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