我有一个在主机上运行的docker-compose创建的docker容器。
获得的Docker容器具有自己的网络:
docker exec -it containername /bin/bash
root@4913fd78f383:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
155: eth0@if156: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:14:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.20.0.2/16 brd 172.20.255.255 scope global eth0
valid_lft forever preferred_lft forever
因此,容器在主机中占据IP 172.20.0.2/16。
我的问题是,以这种方式我的主机无法在连接主机的网络中真正的172.20.x.y主机上连接。
因此,容器(具有自己的ip)隐藏了其他真实地址。
我需要更改现有容器的IP地址,可能无需删除/重新创建它。
我已使用docker compose创建了容器,因此我使用以下命令来运行/停止容器:
docker start containername
docker stop containername
谢谢。
答案 0 :(得分:0)
通常,您有两个选择:
使用docker。使用自定义子网创建网络,然后从docker-compose加入该网络。 for more details
使用docker-compose。定义网络设置。 for more details
具体而言,您必须执行以下操作:
docker network create -d bridge --subnet 172.25.0.0/16 my_custom_network
docker network connect my_custom_network my_running_container
您可以使用
来获得旧网络的名称。docker inspect my_running_container
docker network disconnect old_network my_running_container
docker-compose
创建的不需要的网络。 docker network rm old_network
docker-compose.yml
以使用新网络,以便在有人再次使用docker-compose up
时保持相同的设置。有关上述选项的更多详细信息,请检查Work with Networks
请注意,您还可以按照here
中的说明配置默认的docker0。