这是一个基本的 Docker NGINX 镜像:
FROM nginx:alpine
COPY src /usr/share/nginx/html
EXPOSE 80
图像的元数据包括暴露的端口:
> docker inspect --format '{{json .Config.ExposedPorts}}' ...
{"80/tcp":{}}
但是当使用
docker run --publish-all
运行它时,服务器无法访问。docker run --publish 80:80
运行。
但是
EXPOSE
的目的不是记录图像的端口,以便无需通过 --publish-all
明确列出即可发布它们吗?
--publish-all
标志发布“暴露的端口到临时端口”。
所以,你会得到类似的东西:
docker container inspect cdb234112f53 --format=json \
| jq -r '.[0].NetworkSettings.Ports'
{
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "32769"
}
]
}
在本例中,容器端口 80 映射到主机的 32769(而不是 80)。