Docker Wordpress连接到本地主机上的数据库服务器

时间:2019-03-18 14:23:07

标签: mysql wordpress docker localhost database-connection

我使用命令

运行docker wordpress image
docker run --name  test-wordpress -p 8081:80 -d wordpress

MySQL 8在Windows 10的localhost上。数据库凭据有效。

在wordpress设置中,我使用此配置

  • 数据库名称:wordpress(尚不存在)
  • 用户名:root
  • 密码:***
  • 数据库主机: localhost || 127.0.0.1 || host.docker.internal

我遇到错误

建立数据库连接时出错

什么是正确的数据库主机?

2 个答案:

答案 0 :(得分:1)

默认情况下,docker会将您的新容器连接到桥接网络。这意味着诸如localhost127.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管理卷中。

有关安装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语句。

答案 1 :(得分:0)

找到了一篇很棒的文章,解释了How to setup Wordpress using Docker

问题是无法从wordpress容器访问MySQL容器,因此要解决此问题,我们将必须创建docker网络并连接两个容器。

让我们创建一个docker网络-

WITH T(I) AS (VALUES 1 UNION ALL SELECT I+1 FROM T WHERE I < 12)
SELECT TO_CHAR(DATE('2020-' || DIGITS(DEC(I, 2)) || '-01'), 'DDMonYY', 'en_US')
FROM T;

现在使用以下命令附加两个容器-

> docker network create --attachable wordpress-network

现在在浏览器中打开wordpress并将 mysql-container 设置为数据库主机