背景
我正在尝试将服务器从使用 Docker 转换为 Podman。到目前为止,我已经能够将所有服务(总共 15 个)转换为 systemd 作业并毫无问题地运行它们。在此过程中,我创建了一个桥接设备 ( ) 并向其br0
添加了物理接口 ( eno1
) 和 pod 的接口。使用驱动程序veth
将另一个运行的容器bind
连接到桥macvlan
。到目前为止,一切都按照我的预期运行。
问题
现在,我尝试在容器中启动 GitLab,并希望使用标准端口 22 和 443。由于这些端口低于 1024,我必须以 root 身份调用此容器,然后切换到其他用户(官方容器gitlab-ce
)总共使用 8 个不同的用户)。每当我尝试启动容器时,我都会收到以下错误:
podman[1161766]: Error: cannot listen on the TCP port: listen tcp4 :22: bind: address already in use
这让我感到困惑,因为我已经将 sshd 配置为仅侦听特定br0
IP 地址(物理主机具有 /24 地址 >= 100,容器具有 4 到 99 之间的 /24 地址):
ListenAddress 192.168.1.104
然后使用 netstat 进行验证:
tcp 0 0 192.168.1.104:22 0.0.0.0:* LISTEN 695475/sshd
容器被配置为以与主机系统不同的 MAC ( FE:ED:DE:AD:BE:EF
) 和 IP ( ) 启动。192.168.1.15
问题
还有什么会使用端口 22?
如果失败了,鉴于 netstat 仅显示使用端口 22 的 sshd,我将如何找到罪魁祸首?
据我所知,这应该有效。即使容器在内部切换到非根用户,OCI 运行时也是从根上下文调用的,因此,当它尝试配置网络接口时,它应该能够绑定到端口。 DNS 容器进一步验证了这一点,该容器能够毫无问题地绑定到端口 53。