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 即可解决问题

SNinfinite

立志成为Double E的程序猿

您可能还喜欢...

发表评论

您的电子邮箱地址不会被公开。