use*_*466 12 linux networking containers docker
我有一个具有多个IP地址的专用服务器,一些IP具有关联的mac地址,而其他(在子网中)没有mac地址.我使用以下方法创建了docker macvlan网络:
docker network create -d macvlan -o macvlan_mode=bridge --subnet=188.40.76.0/26 --gateway=188.40.76.1 -o parent=eth0 macvlan_bridge
Run Code Online (Sandbox Code Playgroud)
我有ip:88.99.102.115与mac:00:50:56:00:60:42.使用以下方法创建容器:
docker run --name cont1 --net=macvlan_bridge --ip=88.99.102.115 --mac-address 00:50:56:00:60:42 -itd nginx
Run Code Online (Sandbox Code Playgroud)
这工作,我可以从外面访问托管在该IP地址的nginx.
IP的情况,没有mac地址,网关不在子网中.
子网:88.99.114.16/28,网关:88.99.102.103
无法使用以下方法创建网络:
docker network create -d macvlan -o macvlan_mode=bridge --subnet=88.99.114.16/28 --gateway=88.99.102.103 -o parent=eth0 mynetwork
Run Code Online (Sandbox Code Playgroud)
引发错误:
no matching subnet for gateway 88.99.102.103
Run Code Online (Sandbox Code Playgroud)
尝试增加子网范围以包括网关:
docker network create -d macvlan -o macvlan_mode=bridge --subnet=88.99.0.0/16 --gateway=88.99.102.103 -o parent=eth0 mynetwork
Run Code Online (Sandbox Code Playgroud)
网络已经创建,然后使用'mynetwork'启动nginx容器,而且我没有88.99.114.18的mac地址所以使用了一些随机的mac地址40:1c:0f:bd:a1:d2.
docker run --name cont1 --net=mynetwork --ip=88.99.114.18 --mac-address 40:1c:0f:bd:a1:d2 -itd nginx
Run Code Online (Sandbox Code Playgroud)
无法达到nginx(88.99.102.115).
我对网络知识不多,如果你详细解释,它会非常有用.
我的/ etc/network/interfaces文件:
### Hetzner Online GmbH - installimage
# Loopback device:
auto lo
iface lo inet loopback
iface lo inet6 loopback
# device: eth0
auto eth0
iface eth0 inet static
address 88.99.102.103
netmask 255.255.255.192
gateway 88.99.102.65
# default route to access subnet
up route add -net 88.99.102.64 netmask 255.255.255.192 gw 88.99.102.65 eth0
iface eth0 inet6 static
address 2a01:4f8:221:1266::2
netmask 64
gateway fe80::1
Run Code Online (Sandbox Code Playgroud)
如果我的网关不在我的子网中,如何创建macvlan docker网络?
网关地址必须与接口位于同一子网中.要使用此新子网,您需要使用其中一个IP地址,并将其作为网关分配给主机上的某个位置.
从主机屏幕截图中,88.99.114.16/28子网已设置为通过主机88.99.102.103进行路由.如果希望Docker使用子网中的其余IP地址,则需要在主机上的某个位置创建一个用作网关的接口.
为Docker创建一个桥接网络,桥接器将被分配网关地址88.99.114.17
docker network create \
--driver=bridge \
--subnet 88.99.114.16/28 \
--gateway=88.99.114.17 \
name0
Run Code Online (Sandbox Code Playgroud)
您可能还需要启用IP转发才能使路由正常工作.配置ip转发/etc/sysctl.conf:
net.ipv4.ip_forward = 1
Run Code Online (Sandbox Code Playgroud)
并应用新设置
sysctl -p /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)
然后在新桥上运行容器,您的路由网络应该能够访问网关和Internet
docker run --net=name0 --rm busybox \
sh -c "ip ad sh && ping -c 4 88.99.114.17 && wget api.ipify.org"
Run Code Online (Sandbox Code Playgroud)
您可能需要允许在iptables中访问子网,具体取决于您的默认FORWARD策略
iptables -I DOCKER -d 88.99.114.16/28 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
子网上的服务可以从外部访问
docker run --net=name0 busybox \
nc -lp 80 -e echo -e "HTTP/1.0 200 OK\nContent-Length: 3\n\nHi\n"
Run Code Online (Sandbox Code Playgroud)
外面
?? ping -c 2 88.99.114.18
PING 88.99.114.18 (88.99.114.18): 56 data bytes
64 bytes from 88.99.114.18: icmp_seq=0 ttl=63 time=0.527 ms
64 bytes from 88.99.114.18: icmp_seq=1 ttl=63 time=0.417 ms
--- 88.99.114.18 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.417/0.472/0.527/0.055 ms
?? curl 88.99.114.18
Hi
Run Code Online (Sandbox Code Playgroud)
不需要macvlan接口映射.
当我只有IP地址但没有mac地址时,如何使用macvlan网络运行容器?
macvlan用于将物理/主机接口映射到容器中.由于您没有这些地址的物理接口,因此很难将其映射到容器中.
| 归档时间: |
|
| 查看次数: |
4733 次 |
| 最近记录: |