以 root 权限运行的 docker 守护进程在系统级别管理网络。它创建额外的网络,其中 docker 容器有一个 IP 地址,并将主机连接到这些网络。
据我所知,无根 podman 进程也会创建这些网络,但无法将主机连接到这些内部 podman 网络,因为它没有足够的权限。
但是 rootless podman 可以将容器的端口映射到 > 1024 的端口,因为这不需要 root 权限。
我的解决方法:
- 我将在我的无根 podman 容器中运行的 Web 应用程序公开到一个高端口,例如 8090,只能从 127.0.0.1 访问(因此只有来自您的主机的流量可以到达那里)。
- 我设置了一个 NGINX 反向代理来 proxy_pass 从端口 443 到端口 8090 的传入流量。
这样,Web 应用程序可以在无根容器中运行,并且仍然可以在 80 或 443 等标准端口上访问。使用 nginx 作为反向代理,您甚至可以在中心点管理 Let's Encrypt 证书。
注意:在第 1 步中,您必须在 podman 命令中指定端口映射。类似的东西podman run -p 127.0.0.1:8090:80 image
。
为了完整起见,我的 nginx 配置看起来与此类似:
server {
server_name example.org;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
#try_files $uri $uri/ =404;
proxy_pass http://127.0.0.1:8080/;
}
}