11.5. 使用端口映射在容器间通信
在两个容器之间进行通信的最方便方法是使用公布的端口。可使用两种方式发布端口:自动或手动发布。
先决条件
-
container-tools模块已安装。
流程
运行未发布的容器:
# podman run -dt --name=web1 ubi8/httpd-24运行自动发布的容器:
# podman run -dt --name=web2 -P ubi8/httpd-24运行手动发布的容器并发布容器端口 80:
# podman run -dt --name=web3 -p 8888:8080 ubi8/httpd-24列出所有容器:
# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES db23e8dabc74 registry.access.redhat.com/ubi8/httpd-24:latest /usr/bin/run-http... 23 seconds ago Up 23 seconds 8080/tcp, 8443/tcp web1 1824b8f0a64b registry.access.redhat.com/ubi8/httpd-24:latest /usr/bin/run-http... 18 seconds ago Up 18 seconds 0.0.0.0:33127->8080/tcp, 0.0.0.0:37679->8443/tcp web2 39de784d917a registry.access.redhat.com/ubi8/httpd-24:latest /usr/bin/run-http... 5 seconds ago Up 5 seconds 0.0.0.0:8888->8080/tcp, 8443/tcp web3您可以看到:
-
容器
web1没有公布的端口,只能通过容器网络或网桥访问。 容器
web2已自动映射端口 43595 和 42423,以分别发布应用端口 8080 和 8443。注意自动端口映射是可能的,因为
registry.access.redhat.com/8/httpd-24镜像在 Containerfile 中有EXPOSE 8080和EXPOSE 8443命令。-
容器
web3有一个手动发布的端口。主机端口 8888 映射到容器端口 8080。
-
容器
显示
web1和web3容器的 IP 地址:# podman inspect --format='{{.NetworkSettings.IPAddress}}' web1 # podman inspect --format='{{.NetworkSettings.IPAddress}}' web3使用 <IP>:<port> 表示法访问
web1容器:# 10.88.0.2:8080 ... <title>Test Page for the HTTP Server on Red Hat Enterprise Linux</title> ...使用 localhost:<port> 表示法访问
web2容器:# curl localhost:43595 ... <title>Test Page for the HTTP Server on Red Hat Enterprise Linux</title> ...使用 <IP>:<port> 表示法访问
web3容器:# curl 10.88.0.4:8080 ... <title>Test Page for the HTTP Server on Red Hat Enterprise Linux</title> ...