podman集装箱如何连接和港口问题



问题1:root用户不能创建端口号为80的nginx应用程序吗?

Podman无法创建绑定到端口的容器<1024.

不允许非特权用户绑定到端口<1024,所以这需要root。

所以我只能在root下创建nginx?我还需要PHP和mariadb来支持我的网站,我已经尝试在nginx的配置文件中引用PHP:

location ~ .php(.*)$ {
fastcgi_pass   php:9000;
...
}

使用nginx -t进行检查并报告错误:nginx: [emerg] host not found in upstream "php" in ...

但docker是这样工作的

我该怎么办

docker守护进程以root权限运行,在系统级管理网络。它创建了额外的网络,其中docker容器有一个ip地址,并将主机连接到这些网络。

据我所知,无根podman进程也会创建这些网络,但无法将主机连接到这些内部podman网络,因为它没有足够的权限。

但无根的podman可以将集装箱的港口映射到港口>1024,因为这不需要root权限。

我的解决方法:

  1. 我将运行在无根podman容器中的web应用程序暴露给一个像8090这样的高端口
  2. 我设置了一个NGINX反向代理来代理从端口443到端口8090的传入流量
  3. 我配置ufw(任何防火墙都可以(来阻止从外部到端口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:8090/;
proxy_set_header    Host                $http_host;
proxy_set_header    X-Real-IP           $remote_addr;
proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
proxy_set_header    X-Forwarded-Proto   $scheme;
}
}

最新更新