默认情况下,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管理卷中。
有关安装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
语句即可。