尽管已正确绑定,但无法通过本地主机或主机的IP访问容器,但可以通过私有IP地址访问容器

问题描述 投票:0回答:1

我正在尝试创建一个运行我的 Node-js Web 服务器的 Podman 容器。虽然由于某种原因,我无法通过 localhost:443 访问它,但我可以通过容器私有 IP 地址访问它,例如 (10.88.0.5:443)

当我curl私有IP时你可以看到:

curl https://10.88.0.5
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above

(失败只是因为SSL证书是为我的域颁发的,但至少它可以实际联系网站。)

curl https://localhost --connect-timeout 5
curl: (28) SSL connection timeout

连接超时。

看着

sudo netstat -tulp | grep https

您可以看到网络服务器已正确绑定到 443:

tcp       12      0 0.0.0.0:https           0.0.0.0:*               LISTEN      4991/conmon 

podman 报告了同样的事情:

sudo podman port -l
443/tcp -> 0.0.0.0:443

这也是我的容器文件:

FROM node:22.2.0
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 443
CMD ["node", "."]

可以看到443端口暴露了。

这是容器运行的网络配置:

[
     {
          "name": "podman",
          "id": "2f259bab93aaaaa2542ba43ef33eb990d0999ee1b9924b557b7be53c0b7a1bb9",
          "driver": "bridge",
          "network_interface": "podman0",
          "created": "2024-07-10T12:43:23.144060349-04:00",
          "subnets": [
               {
                    "subnet": "10.88.0.0/16",
                    "gateway": "10.88.0.1"
               }
          ],
          "ipv6_enabled": false,
          "internal": false,
          "dns_enabled": false,
          "ipam_options": {
               "driver": "host-local"
          }
     }
]

和我的路由表:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         mynetwork       0.0.0.0         UG    0      0        0 eno2
10.88.0.0       0.0.0.0         255.255.0.0     U     0      0        0 podman0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.100.0   0.0.0.0         255.255.255.0   U     0      0        0 eno2
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

我尝试禁用 UFW。我尝试完全重新安装 Podman。两者都没有起作用。如果我做错了什么或者您希望我尝试什么,请告诉我。我已经尝试解决这个问题四天了。如果有人可以提供帮助,我们将不胜感激。

仅供参考。我正在运行最新版本的 Debian。

docker networking containers podman podman-networking
1个回答
0
投票

podman 的驾驶舱问题。

如果您正在使用 Cockpit 并且您想知道为什么容器可能无法在网络外部正确访问,Cockpit 实际上可能是根本原因。无论出于何种原因,即使正确绑定,通过 Podman 初始化容器时似乎还是存在问题。

解决方案:

解决方案非常简单,只需确保先创建容器并通过 Podman 运行容器即可。就我而言,我必须使用这个命令:

sudo podman run -d -p 443:443/tcp --restart always --name webserver localhost/nodeserver

请记住,这是使用发布标志 (-p) 的语法:

-p=[[ip:][hostPort]:]containerPort[/protocol]

根据文档

最终结果:

现在您已经有了一个正在运行的容器,实际上可以通过 Cockpit 进行管理,因为看来您只需要担心初始化。因此,您仍然可以停止、启动和使用Cockpit提供的所有其他管理功能,如下图所示。我可能决定在Cockpit的官方Github上创建错误报告。 Image of container running inside Cockpit's management web interface.

© www.soinside.com 2019 - 2024. All rights reserved.