Docker 网桥不工作,导致mysql无法远程访问
在docker中运行如下
docker run -d -p 3344:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE='test' mysql:5.7
此时在本地使用mysql workbench无法远程连接该容器中的mysql。
此时通过yum安装bridge-utils
sudo yum intall bridge-utils
通过 brctl show 查看网桥会发现,即使我挂载了mysql,但网桥依旧是 8000.000000000000 说明网桥并没有工作
此时参考了如下大佬的方式使用新建的网桥来解决了该问题 https://huayig.cn/index.php/archives/58/
下面是引用的具体的操作流程:
- 安装 bridge-utils:
sudo yum intall bridge-utils
- 停止 docker 服务:
service docker stop
- 添加网桥:
brctl addbr br0
- 添加 ip 字段:
ip addr add 172.16.0.1/24 dev br0
- 启用网桥 br0:
ip link set dev br0 up
- 查看网络 br0:
ifconfig br0
- 修改 docker 默认网桥:
vi /etc/docker/daemon.json
"bridge":"br0"
- 重启 docker:
service docker start
- 此时查看网桥:
brctl show
,在没有挂载容器前,依旧是8000.000000000000
- 运行测试容器:
docker run -d --name nginx-test -p 80:80 nginx
- 查看网桥详情:
docker network inspect bridge
- 此时容器挂载在网桥上了,再次查看网桥 id:
brctl show
,发现已经变成8000.xxxxxxxxxxxx
,说明已经起作用
后续
通过如上方式,已经可以实现网桥工作。
然而当我使用docker-compose来创建容器时,发现网桥仍然没有工作
查看网桥发现,即便挂在容器,网桥依旧是8000.000000000000
此时在docker-compose.yml中进行如下修改即可
version: "3.8"
services:
mysql:
image: mysql:5.7
network_mode: bridge
加入network_mode: bridge 即可解决问题