docker-compose下的mysql无法被访问到

前置

系统 wsl2+archlinux 网络模式为 mirrored

现象

通过 docker-compose 启动的 mysql 的主从库,无法被访问到,首先 wsl2 配置保持如下设置即可 image.png ![[image-20240527154654116.png]]

注意 hostAddressLoopback=true # 启用 WSL2/WSLg 子系统和 Windows 宿主之间的本地回环互通支持 ,这个是为了支持 127.0.0.1 能访问 wsl2 的环境,但是现在发现在 windows 下无法访问 mysql。 后面发现原因为,wsl2 中的 docker 的配置文件没有把 iptable 转发置为 false

1
2
3
4
5
# cat /etc/docker/daemon.json
{
        "registry-mirrors": ["https://registry.docker-cn.com","https://pee6w651.mirror.aliyuncs.com"],
         "iptables":false
}

重启服务即可。

在 Docker 中,iptables 是用于管理网络流量的工具。当你将 iptables 设置为 false 时,会产生一些影响。让我来详细解释一下:

  1. Docker 和 iptables

    • Docker 在 Linux 上使用 iptables 来实现网络隔离。这些规则用于控制容器之间的通信、端口映射和网络连接。
    • 默认情况下,Docker 会自动管理这些规则,以确保容器之间的网络隔离和通信。
  2. --iptables=false 的影响

    • 当你在启动 Docker 守护进程时使用 --iptables=false 参数时,Docker 将不会修改系统的 iptables 规则。这意味着 Docker 不会添加或更改任何现有的 iptables 规则。
    • 如果你的系统中已经存在一些自定义的 iptables 规则,使用 --iptables=false 可以防止 Docker 覆盖这些规则。
  3. 潜在问题

    • 然而,需要注意的是,如果你在 Docker 启动时设置了

      1
      
      --iptables=false
      

      ,Docker 将不会自动添加容器之间的网络规则。这可能导致以下问题:

      • 容器无法访问外部网络:如果容器需要与外部通信(例如访问互联网),则可能会受到影响。容器将无法通过主机的 NAT 网络访问外部资源。
      • 容器之间的通信问题:容器之间的通信可能受到限制,因为 Docker 不会自动添加必要的规则。
  4. 解决方案

    • 如果你确实需要自定义 iptables 规则,可以在 Docker 守护进程启动时使用 --iptables=false。但是,请确保你已经理解了这样做可能带来的后果,并根据你的需求进行相应的配置。

总之,使用 --iptables=false 可以防止 Docker 修改系统的 iptables 规则,但也可能导致容器之间的网络通信问题。根据你的具体需求,权衡利弊并谨慎使用。如果你还有其他问题,欢迎继续提问!🌟

添加这行带来的问题就是,无法 docker-compose 来运行服务。

Licensed under CC BY-NC-SA 4.0
最后更新于 Jan 06, 2025 05:52 UTC
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计
Caret Up