У меня уже работает контейнер MySQL, который я использую для нескольких других контейнеров.

Теперь я пытаюсь подключить к нему контейнер WordPress, но получаю:

Ошибка при установлении соединения с базой данных

И журнал контейнера wp показывает:

Ошибка подключения MySQL: (1045) Доступ запрещен для пользователя ‘my_user’@’172.20.0.5’ (используется пароль: ДА)

Контейнер mysql уже запущен и работает, имя контейнера — mysql , и я использую контейнер PHPMyAdmin для управления им; Я могу сделать это просто отлично (это связано с контейнером сервера Mysql).

Вот мой докер, создающий код для контейнера WP:

 version: '2' services: wordpress: image: wordpress:latest restart: unless-stopped ports: - 80 environment: WORDPRESS_DB_HOST: mysql WORDPRESS_DB_USER: "my_user" WORDPRESS_DB_PASSWORD: "12345" WORDPRESS_DB_NAME: "my_user" volumes: - /f/Sites/mia:/var/www/html networks: - occms - ocdb networks: occms: external: name: oly-cms ocdb: external: name: oly-db 

Примечания:

  • Мое имя my_user и его имя пользователя совпадают: my_user
  • Я уже предварительно создал пользователя mysql my_user и дал ему полные права доступа к базе данных my_user . (обратите внимание, что фактический пользователь и db начинаются с «g»; я изменил их на «my_user» для конфиденциальности в этом вопросе.)

введите описание изображения здесь

  • Я предварительно импортировал кучу данных в базу данных (это для отладки работающего в настоящее время веб-сайта с использованием резервной копии SQL).
  • После запуска контейнера wp я вручную скопировал все wp-файлы моего производства в папку контейнера wp, в которой находятся те же соответствующие файлы, перезаписав их.
  • Когда я редактирую переменную WORDPRESS_DB_HOST: и перезапускаю контейнер wp, я вижу, что это значение отражено в файле wp-config.php .
  • В wp-config.php я убедился, что учетные данные совпадают:
 define('DB_NAME', 'my_user'); /** MySQL database username */ define('DB_USER', 'my_user'); /** MySQL database password. Changed on: 3/20/2014 2:40 PM */ define('DB_PASSWORD', '12345'); /** MySQL hostname */ define('DB_HOST', 'mysql'); 

Я предполагал, что, если у меня есть контейнеры mysql и wp в одной и той же сети докеров, они смогут соединяться друг с другом? Я что-то упустил в коде составления WP?

Вы устанавливаете переменную для WordPress, а не для MySQL, так что это не будет работать.

Я написал docker-compose для загрузки WordPress с моим MySQL:

  1. Загрузить: https://github.com/aboutsam/wp-docker-startkit

  2. docker-compose up -d