如何使用 podman 为无根容器设置内部和外部网络
How to setup internal and external networking for rootless containers with podman
我正在尝试使用 podman 使网络与无根容器一起工作。建立外部网络和 运行 或内部网络都不是问题。使用 --network 选项,容器能够看到彼此。但是 ping 8.8.8.8 不起作用。在没有 --network 或 --network=slirp4netns ping 8.8.8.8 的情况下启动容器确实按预期工作。当然,在后一种情况下,没有内部网络。我认为这告诉我主机没有阻止来自容器内部的外部访问。我面临的问题是我似乎无法同时在容器内运行内部和外部网络。
> podman network ls
NETWORK ID NAME VERSION PLUGINS
2f259bab93aa podman 0.4.0 bridge,portmap,firewall,tuning
6129a34887d3 container-net 0.4.0 bridge,portmap,firewall,tuning,dnsname
我正在这样启动容器:
podman pod create \
--network container-net \
--network-alias test-pod \
--hostname test-01 \
--name test-pod
start-test.sh
的内容:
podman run --rm -it \
--pod test-pod \
--network=container-net \
--dns-search dns.podman \
--name test-01 \
--network-alias test-01 \
docker.io/alpine /bin/sh
> ./start-test.sh
/ # ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
^C
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 0 packets received, 100% packet loss
> podman --version
podman version 3.3.1
我也通过以下测试确认 selinux 不是原因:setenforce 0
。
是否可以在容器内同时使用内部和外部网络?如果可以,需要做什么?
我刚刚在 RHEL 8 上试过,我能够重现这个问题。我们也解决了这个问题(我认为)。请尝试以下操作:
sudo sysctl -w net.ipv4.ping_group_range="0 2147483647"
您可能受组范围限制 /etc/subuid /etc/subgid:
https://man7.org/linux/man-pages/man7/icmp.7.html
我不确定长期解决方案是什么,但如果可行,您现在可以使用 sysctl 修复它。
我遇到的问题与任何配置无关。事实证明,在删除所有 podman 创建的网络、重新启动机器并重新创建我需要的网络后,容器的行为符合预期,即内部和外部网络都在工作。
我正在尝试使用 podman 使网络与无根容器一起工作。建立外部网络和 运行 或内部网络都不是问题。使用 --network 选项,容器能够看到彼此。但是 ping 8.8.8.8 不起作用。在没有 --network 或 --network=slirp4netns ping 8.8.8.8 的情况下启动容器确实按预期工作。当然,在后一种情况下,没有内部网络。我认为这告诉我主机没有阻止来自容器内部的外部访问。我面临的问题是我似乎无法同时在容器内运行内部和外部网络。
> podman network ls
NETWORK ID NAME VERSION PLUGINS
2f259bab93aa podman 0.4.0 bridge,portmap,firewall,tuning
6129a34887d3 container-net 0.4.0 bridge,portmap,firewall,tuning,dnsname
我正在这样启动容器:
podman pod create \
--network container-net \
--network-alias test-pod \
--hostname test-01 \
--name test-pod
start-test.sh
的内容:
podman run --rm -it \
--pod test-pod \
--network=container-net \
--dns-search dns.podman \
--name test-01 \
--network-alias test-01 \
docker.io/alpine /bin/sh
> ./start-test.sh
/ # ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
^C
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 0 packets received, 100% packet loss
> podman --version
podman version 3.3.1
我也通过以下测试确认 selinux 不是原因:setenforce 0
。
是否可以在容器内同时使用内部和外部网络?如果可以,需要做什么?
我刚刚在 RHEL 8 上试过,我能够重现这个问题。我们也解决了这个问题(我认为)。请尝试以下操作:
sudo sysctl -w net.ipv4.ping_group_range="0 2147483647"
您可能受组范围限制 /etc/subuid /etc/subgid:
https://man7.org/linux/man-pages/man7/icmp.7.html
我不确定长期解决方案是什么,但如果可行,您现在可以使用 sysctl 修复它。
我遇到的问题与任何配置无关。事实证明,在删除所有 podman 创建的网络、重新启动机器并重新创建我需要的网络后,容器的行为符合预期,即内部和外部网络都在工作。