阿里云 Docker 端口映射无效的解决办法

技术 · 2023-02-06
阿里云 Docker 端口映射无效的解决办法

通过 Docker 运行的 Mysql 容器,无法连接 (10060 "Unknown error"),但是查看服务状态却是正常启动。

10060

环境说明

  • 阿里云服务器;
  • 应用镜像:Docker;
  • 防火墙:firewalled 已关闭;
  • 组策略:阿里云服务器控制面板 -> 安全 -> 防火墙,已放行 3306 端口。

查找原因

使用命令,查看容器运行情况:

docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
8966e9757b04        mysql               "docker-entrypoint.s…"   2 hours ago         Up 34 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql-instance

根据返回内容显示可知,容器已经正常启动,同时由宿主主机端口 3306 映射到了容器的 3306 端口。

那就神奇了,容器已经正常运行,端口也映射正常,问题还会出现在什么地方呢?

在Linux 系统中,通常同一台设备的网卡,网段不能相同。

使用命令查看系统网络设备情况:

ifconfig

docker0 为 Docker 使用的虚拟网卡,etho0 为服务器内网网卡。

此时问题暴露出来了,它们使用的网段都为 172 ,导致网段冲突。

ifconfig

解决办法

1. 找到 Docker 服务

find / -name docker.service

# /lib/systemd/system/docker.service

2. 修改服务启动参数

找到启动服务中的 ExecStart 属性,在其后面添加 --bip "192.168.1.1/24"

ExecStart=/usr/bin/dockerd --bip "192.168.1.1/24" -H fd:// --containerd=/run/containerd/containerd.sock

3. 重载并重启服务

systemctl daemon-reload
systemctl restart docker

至此已经可以正常连接 MySql 服务器了。上面是通过在启动服务时,修改了 bip 。

不过我看网络上还有一种办法是修改 daemon.json 文件,但是这个文件我在服务器上没找到,不过还是记录一下。

4. 其它办法(未实践)

/etc/docker/daemon.json 文件里的 "bip" 值改成 "192.168.1.1/24" 。

{
  ...
  "bip": "192.168.1.1/24",
  ...
}
Linux Docker MySQL
  1. changinlo 2023-02-07

    666

Theme Jasmine by Kent Liao