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

标签 mysql wordpress docker localhost database-connection

我运行 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

我收到错误

建立数据库连接时出错

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

最佳答案

默认情况下,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 语句即可。

关于mysql - Docker Wordpress 连接到本地主机上的数据库服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55223576/

相关文章:

python - 在azure上使用docker镜像部署python web应用程序

php - 每次查询后关闭 MySQL 连接

mysql日期时间索引不适用于某些特定日期范围

php - Woocommerce 订阅 - 开始日期

php - 阻止 WordPress 自动格式化某些代码

docker - 停止时如何在Docker容器中修改启动脚本?

mysql - 从日期和时间值位于单独列中的表中选择

mysql - 不断收到外键错误

mysql - order by 的奇怪问题,wordpress 查询中的内部连接

mongodb - 如何通过docker-compose在docker上创建用户并登录mongodb数据库?