11.7. 使用端口映射在容器间通信
在两个容器之间进行通信的最方便方法是使用公布的端口。可使用两种方式发布端口:自动或手动发布。
先决条件
-
container-tools元数据包已安装。
流程
运行未发布的容器:
podman run -dt --name=web1 ubi9/httpd-24
# podman run -dt --name=web1 ubi9/httpd-24Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行自动发布的容器:
podman run -dt --name=web2 -P ubi9/httpd-24
# podman run -dt --name=web2 -P ubi9/httpd-24Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行手动发布的容器并发布容器端口 80:
podman run -dt --name=web3 -p 9090:80 ubi9/httpd-24
# podman run -dt --name=web3 -p 9090:80 ubi9/httpd-24Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出所有容器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以看到:
-
容器
web1没有公布的端口,只能通过容器网络或网桥访问。 容器
web2已自动映射端口 43595 和 42423,以分别发布应用端口 8080 和 8443。注意可能会出现自动端口映射,因为
registry.access.redhat.com/9/httpd-24镜像在 Containerfile 中具有EXPOSE 8080和EXPOSE 8443命令。-
容器
web3有一个手动发布的端口。主机端口 9090 映射到容器端口 80。
-
容器
显示
web1和web3容器的 IP 地址:podman inspect --format='{{.NetworkSettings.IPAddress}}' web1 podman inspect --format='{{.NetworkSettings.IPAddress}}' web3# podman inspect --format='{{.NetworkSettings.IPAddress}}' web1 # podman inspect --format='{{.NetworkSettings.IPAddress}}' web3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 <IP>:<port> 表示法访问
web1容器:curl 10.88.0.14:8080
# curl 10.88.0.14:8080 ... <title>Test Page for the HTTP Server on Red Hat Enterprise Linux</title> ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 localhost:<port> 表示法访问
web2容器:curl localhost:43595
# curl localhost:43595 ... <title>Test Page for the HTTP Server on Red Hat Enterprise Linux</title> ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 <IP>:<port> 表示法访问
web3容器:curl 10.88.0.14:9090
# curl 10.88.0.14:9090 ... <title>Test Page for the HTTP Server on Red Hat Enterprise Linux</title> ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow