Ser*_*ura 5 networking iptables docker docker-network
问题:如何使用 docker 的 ipvlan 网络将转发端口 80 重定向到同一特定 IP 地址上的端口 8080?
情况:我通过发出命令创建了一个 docker 网络
docker network create -d ipvlan --subnet=192.168.0.1/22 --gateway=192.168.0.1 \
-o ipvlan_mode=l2 -o parent=enp8s0 my_network
Run Code Online (Sandbox Code Playgroud)
我的接口enp8s0位于同一子网、同一网关上。
然后,我8080通过发出以下命令创建了一个 docker 容器,该容器具有公开 port 的服务:
docker run --detach --restart=unless-stopped \
--network=my_network \
--ip=192.168.2.10 \
--hostname my_service \
--name my_service \
-p 8080:8080 \
-p 80:8080 \
my_service:latest
Run Code Online (Sandbox Code Playgroud)
我可以成功访问 上的服务http://192.168.2.10:8080。
问题:我无法访问端口 上的服务80。端口8080工作正常。在这种情况下,更改内部服务配置对我来说是不切实际的,因为我需要两个端口80并8080具有连接性,这将需要大量代码重写(并且我还有其他服务需要对不同端口进行相同的转发) 。
我尝试在主机上通过发出命令来使用 iptables 进行端口转发iptables -t nat -A PREROUTING -d 192.168.2.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.10:8080,但它不起作用。另外,我看不到该 IP.2.10已分配给主机上的任何内容。
如果有帮助,这里有一些输出:
# ip a
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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether b4:2e:99:XX:XX:XX brd ff:ff:ff:ff:ff:ff
inet 192.168.0.194/22 brd 192.168.3.255 scope global dynamic enp8s0
valid_lft 70764sec preferred_lft 70764sec
inet6 2607:fea8:2d40:611:b62e:99ff:fe38:7bdf/64 scope global dynamic mngtmpaddr
valid_lft 595sec preferred_lft 595sec
inet6 fe80::b62e:99ff:fe38:7bdf/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:4f:XX:XX:XX brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:4fff:feee:4f22/64 scope link
valid_lft forever preferred_lft forever
# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N DOCKER
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A PREROUTING -d 192.168.2.10/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.10:8080
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
Run Code Online (Sandbox Code Playgroud)
谢谢你!
| 归档时间: |
|
| 查看次数: |
1285 次 |
| 最近记录: |