Docker Wordpress соединение с сервером базы данных на локальном хосте - PullRequest
1 голос
/ 18 марта 2019

Я запускаю Docker WordPress Image с командой

docker run --name  test-wordpress -p 8081:80 -d wordpress

MySQL 8 находится на локальном хосте в Windows 10. Учетные данные базы данных действительны.

В настройках WordPress я использую эту конфигурацию

  • Имя базы данных: wordpress (еще не существует)
  • Имя пользователя: root
  • Пароль: ***
  • Хост базы данных: localhost || 127.0.0.1 || host.docker.internal

Я получаю ошибку

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

Что такое правильный хост базы данных?

1 Ответ

1 голос
/ 18 марта 2019

По умолчанию Docker подключит ваш новый контейнер к мостовой сети.Это означает, что адреса, такие как: localhost и 127.0.0.1 относятся только к самому контейнеру.Это не хост-машина.

Решить эту проблему было легко, это заключить базу данных MySQL в собственный контейнер.Таким образом, ваши контейнеры могут обращаться друг к другу без проблем.

Подключение к базе данных MySQL на хосте

Если вы действительно хотите соединить сервис в контейнере с сервисом на хосте, вам потребуетсядля подключения контейнера к соответствующей сети.

Сначала вам нужно будет создать сеть.Предполагая, что ваш локальный компьютер имеет фиксированный IP-адрес 192.168.0.1, вы сможете сделать это с помощью:

docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 dockernet

Затем вы можете:

docker run --name  test-wordpress --net=dockernet -p 8081:80 -d wordpress

И тогда вы должны бытьвозможность обращаться к хосту изнутри контейнера по IP: 192.168.0.1.

Создание стека с помощью WordPress и MySQL

Тем не менее, лучшей альтернативой здесь является создание определения стека приложения сdocker-compose, который включает в себя базу данных и приложение WordPress.

Вы можете создать файл docker-compose.yml, например:

docker-compose.yml

version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
volumes:
    db_data: {}

И запустите стек следующим образом:

docker-compose up

Затем посетите: http://localhost:8000

Обратите внимание, что данные базы данных будут храниться в управляемом томе докера, называемом db_data.

Подробную информацию об установке docker-compose можно найти здесь: https://docs.docker.com/compose/install/

Запустите оба контейнера с помощью docker run

То же самое можно сделать с помощью docker run, вот так:

docker volume create db_data

docker network create mysqlnet

docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=somewordpress -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress -v db_data:/var/lib/mysql --net=mysqlnet -d mysql:5.7

docker run --name test-wordpress -e WORDPRESS_DB_HOST=test-mysql:3306 -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpress -e WORDPRESS_DB_NAME=wordpress --net=mysqlnet -p 8081:80 -d wordpress:latest

Вы можете изменить отображение данных mysqlвместо этого перейдите в локальный каталог и просто пропустите оператор docker volume create.

...