docker - 如何更改 docker 容器的子网和 IP 地址?
问题描述
我有一个在主机上运行 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.xy 主机。
因此,容器(具有自己的 ip)隐藏了其他真实地址。
我需要更改现有容器的 IP 地址,可能不需要删除/重新创建它。
我用 docker compose 创建了我的容器,所以我使用这些命令来运行/停止容器:
docker start containername
docker stop containername
提前致谢。
解决方案
一般来说,您有两种选择:
在您的情况下,您必须执行以下操作:
- 使用 docker cli 创建网络。
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
再次使用时保持相同的设置。
有关上述选项的更多详细信息,请查看使用网络
请注意,您还可以按照此处的说明配置默认 docker0
推荐阅读
- html - 弹性盒
页面上的元素重叠图像调整大小
- javascript - 如何访问json数据os asyncStorage函数
- angular - 双击 Angular 指令
- perl - 为什么我不能在 Strawberry Perl 5.28.1 上构建“真正的”编译指示模块?
- ruby-on-rails - 如何在 Rspec 中测试 Pundit 范围?
- angular6 - 全局 Angular CLI 版本 (7.2.2) 高于您的本地版本
- ruby-on-rails - 从集合中获取记录
- regex - Apache Camel / 正则表达式替换字符
- javascript - keyup 上 inputBox 的货币/会计格式
- spring-boot - 在 soring boot 中使用 graph api 实现 microsoft 身份验证的建议