docker-swarm-networks

docker swarm networks

网段冲突问题解决方案

根据搜索结果,以下是关于如何更改Docker Ingress网络默认子网范围的解决方案:

  1. 首先,我们需要确认当前Docker Ingress网络的默认子网范围。可以使用以下命令检查网络配置信息:docker network inspect ingress [1]

  2. 如果默认子网范围与您的计算机子网范围冲突,您可以尝试以下方法来更改Docker Ingress网络的子网范围:

    • 方法一:使用Docker Swarm命令行选项来指定子网范围。在初始化或加入Docker Swarm时,可以使用--default-addr-pool选项来指定子网范围。例如:docker swarm init --default-addr-pool 192.168.0.0/16 [1]
    • 方法二:编辑Docker的守护进程配置文件daemon.json来指定子网范围。您可以使用以下步骤进行操作:
      • 使用文本编辑器打开/etc/docker/daemon.json文件(在Windows上是C:\ProgramData\Docker\config\daemon.json)。

      • 添加以下内容到文件中:

        1
        2
        3
        4
        5
        {
        "default-address-pools": [
        {"base":"192.168.0.0/16","size":24}
        ]
        }

        192.168.0.0/16替换为您想要的子网范围。

      • 保存文件并重启Docker服务,以使更改生效。在Linux上,可以使用sudo systemctl restart docker命令来重启Docker服务,在Windows上,可以通过Docker桌面界面的”Troubleshoot”选项来重启Docker Desktop [2]

请注意,更改Docker网络的子网范围可能会影响到已经运行的容器和网络连接,请谨慎操作并确保备份重要数据。


Learn more:

  1. networking - How to change ip address range of docker swarm ingress network - Stack Overflow
  2. How to change the default docker subnet IP range
  3. Changing Docker’s default subnet IP range | cylab.be

宿主机与容器不通问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 方式一:添加路由
# route add -net 192.168.1.0 netmask 255.255.255.0 gw 172.20.0.1 dev docker_gwbridge # dev 是用来指定网络接口的参数。它用于指定要添加路由的网络接口设备。
route add -net <容器IP网段> netmask <容器IP网段的子网掩码> gw <docker_gwbridge的网关IP> dev docker_gwbridge
## 查看路由
route -n

## 更多操作

# 端口转发问题(上面解决了路由的问题,若还有端口访问不通,则按下面方式解决)

# 查看nat转发的规则
iptables -t nat -nvL

# 添加nat转发规则(实现宿主机访问容器中未开放的端口(即docker run时未添加-p参数))
iptables -t nat -A DOCKER -p tcp -m tcp --dport 8088 -j DNAT --to-destination 10.0.0.2:8088
# 删除nat
## 查看规则编号
iptables -t nat -nL --line-number
## 删除编号
iptables -t nat -D DOCKER 4