最简单实用的方法:
docker默认的内网网段为172.17.0.0/16,如果公司内网网段也是172.17.x.x的话,就会发生路由冲突。
解决办法
改路由比较办法,可以一开始就将docker配置的bip改成169.254.0.1/24,可以避免冲突。
在daemon配置文件里加个"bip":“169.254.0.1/24”,重启docker就可以了
1
2
3
4
[root@st-dev6 ~]
# vim /etc/docker/daemon.json
{
"bip"
:
"169.254.0.1/24"
}
systemctl restart docker
如果已经建好容器,可按以下2个方法进行更改:
方法一:在Docker中,容器默认使用的是桥接模式的网络,这个网络是由Docker自动管理的。如果你想要为容器指定一个IP地址,你可以创建一个自定义的网络,并在运行容器时指定IP。
以下是创建自定义网络并为容器指定IP的步骤:
请注意,指定的IP地址必须在你创建的自定义网络的子网范围内。如果你想要修改正在运行的容器的IP地址,你需要先停止容器,然后删除它,并使用新的IP地址重新创建它。
docker stop myapp
docker rm myapp
- 创建自定义网络:
docker network create --subnet=172.18.0.0/16 mynet
2.运行容器时指定IP:
docker run --network mynet --ip 172.18.0.22 -d nginx
在这个例子中,我们创建了一个名为mynet的自定义网络,并指定了一个172.18.0.0/16的子网。然后,我们运行一个nginx容器,并将其IP设置为172.18.0.22。
验证: docker inspect myapp | grep "IPAddress"
方法二:想要修改正在运行的jms_redis容器IP
1、docker network ls 查看网络情况
[root@docker-server containers]# docker network ls
NETWORK ID NAME DRIVER SCOPE
cc39f6bdde6e bridge bridge local
b6af872c8bd6 host host local
4c1eb41fb1a8 jms_net bridge local
9f111fc0102f mynet bridge local
740c9ce10fc1 none null local
2、docker network inspect 4c1eb41fb1a8
查看jms_net ID的具体配置
或者用这个命令
[root@docker-server containers]# docker inspect jms_redis |grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "192.168.250.2",
3、需要进入容器的网络命名空间。可以使用以下命令获取容器的PID(Process ID)号
[root@docker-server containers]# docker inspect -f '{{.State.Pid}}' 9d06599e52df
21985
4、可以使用以下命令进入容器的网络命名空间:
[root@docker-server containers]# nsenter --target 21985 --net /bin/bash
在容器内部,可以使用ip addr命令查看容器的网络配置信息。
4、修改jms_redis 容器IP
ip addr add 172.18.0.22/16 dev eth0
ip link set eth0 up
使用ip link set命令将eth0接口打开
再次使用ip addr命令查看容器的网络配置信息,确认修改是否已经生效。
版权归原作者 redmond88 所有, 如有侵权,请联系我们删除。