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