По умолчанию 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
.