9.7. 使用端口映射在容器间通信
在两个容器之间进行通信的最方便方法是使用公布的端口。可使用两种方式发布端口:自动或手动发布。
先决条件
-
container-tools
元数据包已安装。
流程
运行未发布的容器:
podman run -dt --name=web1 ubi10/httpd-24
# podman run -dt --name=web1 ubi10/httpd-24
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行自动发布的容器:
podman run -dt --name=web2 -P ubi10/httpd-24
# podman run -dt --name=web2 -P ubi10/httpd-24
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行手动发布的容器,并发布容器端口 8080:
podman run -dt --name=web3 -p 8888:8080 ubi10/httpd-24
# podman run -dt --name=web3 -p 8888:8080 ubi10/httpd-24
Copy 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/10/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
# podman inspect --format='{{.NetworkSettings.IPAddress}}' web1 # podman inspect --format='{{.NetworkSettings.IPAddress}}' web3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 <IP>:<port> 表示法访问
web1
容器:curl 10.88.0.2:8080
# curl 10.88.0.2: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.4:8080
# curl 10.88.0.4:8080 ... <title>Test Page for the HTTP Server on Red Hat Enterprise Linux</title> ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow