无法使用 podman 在两个 rootfull 容器之间进行通信

无法使用 podman 在两个 rootfull 容器之间进行通信

我有两个 nginx 容器正在运行。

一个监听端口 80,另一个监听端口 8080。

以下是我运行它们的方式:

sudo podman run --rm \
 -t \
 -p 8080:80 \
 --publish-all \
 --name nginx-two \
 -v ./html2/:/usr/share/nginx/html \
 -v ./html2/conf/default.conf:/etc/nginx/conf.d/default.conf \
 -d nginx

第二:

sudo podman run --rm -t -p 80:80 --name nginx -v ./html/:/usr/share/nginx/html -v ./html/conf/conf.d:/etc/nginx/conf.d -d nginx

NGiNX 配置:

location / {
    proxy_pass http://10.88.0.37:8080;
}

我也尝试过:

location / {
    proxy_pass http://127.0.0.1:8080;
}

该配置由容器使用--name=nginx

这是我收到的错误:

2020/01/26 15:33:05 [error] 8#8: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 10.88.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/", host: "localhost"
10.88.0.1 - - [26/Jan/2020:15:33:05 +0000] "GET / HTTP/1.1" 502 157 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0" "-"

有没有办法让这些容器相互通信?

我也尝试使用--pod。但随后出现此错误:

Error: cannot set port bindings on an existing container network namespace

答案1

您不应使用--publish-all,因为 podman-run 的手册页表明这会将所有公开端口发布到主机接口的随机端口。-p因此该选项就足够了。

创建一个两个容器所在的专用网络可以帮助解决您的问题,然后您可以使用命令--network=network-id的选项引用它run

当使用 pod 时,端口映射应该在 pod 本身上定义,而不是在该 pod 内的容器上定义:

podman pod create --name mypod -p 80:80

由于 80 端口冲突,因此无法在单个 pod 中运行两个 nginx 实例。(它使用镜像的公开端口)

Red Hat 发布了一个很好的解释:https://www.redhat.com/sysadmin/container-networking-podman

相关内容