docker - 如何更改现有 docker 网络的配置
问题描述
我有一个名为“VPN”的现有(MacVLAN)docker 网络,我通常将我都想在 VPN 上运行的 docker 容器附加到该网络。有两个运行 openvpn 的单个“主机”docker 容器,每个都有自己的 IP,我可以随意将其他容器附加到这些容器上。
我最近搬家了,我的新路由器在 address 192.168.0.1
。但是,老房子的路由器的网关位于192.168.2.254
,现有的 docker 网络为此配置了子网掩码、IP 范围和网关。
如果我运行docker network inspect VPN
它会给出:
[
{
"Name": "VPN",
"Id": [anidea],
"Created": [sometimenottolongago],
"Scope": "local",
"Driver": "macvlan",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.2.0/24",
"IPRange": "192.168.2.128/28",
"Gateway": "192.168.2.254"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"parent": "enp5s0"
},
"Labels": {}
}
]
网络上有两台机器,我目前无法访问它们。两台机器都是一个容器,其他容器连接到该容器。我努力了:
- 在新家庭网络的子网上使用新 IP 地址重新创建 docker 容器。这不起作用,因为 docker 网络“VPN”只允许旧范围内的 IP。
- 以旧 IP 访问 docker 容器/机器。然后我得到一个超时;可能我需要设计一些IP路由什么的?这就是我的知识(如果有的话)开始变得模糊的地方。
我认为最好的办法是更新 docker 网络“VPN”以与新的网关/路由器/家庭网络配合使用;我想更改IPAM["Config"]
参数以更新新网关和子网。但是,我在网上找不到如何执行此操作(唯一出现的是如何更改默认docker 网络的默认设置)。
长话短说: 如何更改现有docker 网络的配置/参数?
最后,如果这是一种不好的做事方式(例如,如果我可以按现状访问网络上的容器),我也愿意接受想法。
主机正在运行 ubuntu-server 20.04.1
LTS。
提前致谢。
解决方案
最简单的方法是删除 VPN 网络并使用新参数但名称相同重新创建它。如果您用于docker-compose up
重新创建容器,请将该networks
部分包含在您重新创建的第一个容器中。
首先,运行这个来删除现有的网络:
docker network rm VPN
然后将 macvlan 网络定义添加到yml
您的第一个重新创建的容器中。这是networks
我使用的部分,在某种程度上适应了您的情况:
networks:
VPN:
driver: macvlan
enable_ipv6: true # if needed
driver_opts:
parent: eth0
ipam:
config:
- subnet: 192.168.0.0/24
gateway: 192.168.0.1
ip_range: 192.168.0.8/30 # reserve some IP addresses for other machines
# in that subnet - adjust as needed
- subnet: xx:xx:xx:xx::/63 # put your IPv6 subnet here if needed
gateway: xx:xx:xx:xx:xx::xx # IPv6 (external) of your router
或者,您可以更改您的新路由器配置以匹配旧路由器配置,并保持您的 macvlan VPN 保持原样。
推荐阅读
- c# - ViewModel 中的 Properties.Settings.Default.Save() 是否可行?
- javascript - setState 不执行回调
- java - JLabel 等组件中 html 的默认样式是什么
- r - 创建 RStudio 项目时 .rprofile 不是源
- c# - 如何在 C# 中获取存储过程的第一行?
- .net - Azure 功能毒物队列会使整个作业功能崩溃吗?
- python - NumPy - 从另一个二维数组中选择一个子矩阵
- sql - 为什么我们不能在子查询中使用/引用派生表
- mysql - 如何将我的 docker Django 实例连接到我的 docker mysql 实例?
- javascript - 谷歌地图 - 查询地理编码返回不正确的结果