允许 Docker 容器使用宿主机的 MySQL 数据库
首先,在不使用 host 模式的情况下,容器是不可以直接访问宿主机的服务的(可以 PING 通宿主机的 IP)。
其次,每次 docker compose down
之后,容器的 IP 是会改变的。
那么,解决步骤如下:
1、查看当前宿主机的 IP (容器虚拟 IP):
ip add show docker0 | grep inet
2、创建一个网络 mynetwork:
docker network create mynetwork
3、创建的容器中添加内容:
networks:
mynetwork:
external: true
services:
myweb:
...
networks:
mynetwork:
4、查看 mynetwork 的 IP(同时也是容器的 IP):
此方式下,重置容器时,不会变更该容器的 IP。
docker network inspect mindoc | grep IPv4Address
5、将该 MySQL 的 IP 设置为该 IP:
宝塔配置如下图

若使用命令行,则将下面内容在宿主机的 MySQL 命令行中执行 (注意将 MY_NETWORK_IPADDRESS 改为实际的容器 IP)
grant all privileges on *.* to 'root'@'MY_NETWORK_IPADDRESS' identified by 'pwd' with grant option;
6、有时候,有内部防火墙 ufw,则需要将 3306 端口对该 IP 启用:
ufw allow from MY_NETWORK_IPADDRESS to any port 3306