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

2 mysql wordpress database-connection localhost docker

我用命令运行docker wordpress 图像

docker run --name  test-wordpress -p 8081:80 -d wordpress
Run Code Online (Sandbox Code Playgroud)

MySQL 8 在 Windows 10 上的本地主机上。数据库凭据有效。

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

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

我得到错误

建立数据库连接时出错

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

And*_*zen 6

默认情况下,docker 会将您的新容器附加到桥接网络。这意味着诸如: localhostand 之类的地址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
Run Code Online (Sandbox Code Playgroud)

然后你可以:

docker run --name  test-wordpress --net=dockernet -p 8081:80 -d wordpress
Run Code Online (Sandbox Code Playgroud)

然后您应该能够通过 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: {}
Run Code Online (Sandbox Code Playgroud)

然后用这个开始堆栈:

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: {}
Run Code Online (Sandbox Code Playgroud)

然后访问:http://localhost:8000

请注意,数据库数据将存储在名为 的 docker 管理卷中db_data

可以在此处找到有关安装 docker-compose 的详细信息:https : //docs.docker.com/compose/install/

用 just 启动两个容器 docker run

使用 just 也可以实现相同的效果docker run,如下所示:

docker-compose up
Run Code Online (Sandbox Code Playgroud)

您可以将 mysql 数据文件的映射更改为本地目录,而只需省略该docker volume create语句。