使用 Dockerfile 暴露端口

Docker 进阶

Mike Metzger

Data Engineer

暴露服务

  • EXPOSE 指令
  • 定义容器在运行时使用的端口
  • 可写为 <number><number>/tcp<number>/udp
    • EXPOSE 80EXPOSE 80/tcp
  • 允许多条
  • 用作文档说明
Docker 进阶

使用 -p / -P 标志

  • 仍需在 docker run 中使用 -p-P 才能让端口对外可用
  • -P 会自动将临时端口映射到已暴露端口。需用 docker ps -a 查看映射结果。
  • 使用 -p<host port>:<container port> 可指定端口
Docker 进阶

EXPOSE 示例

# Dockerfile
FROM python:3.11-slim
ENTRYPOINT ["python","-mhttp.server"]
# Let the Docker engine know 
# port 8000 should be available
EXPOSE 8000
  • 从镜像创建容器
    docker run pyserver
    
  • 查看容器状态
    docker ps -a
    
CONTAINER ID   IMAGE         ...   PORTS      NAMES
8c3d320255ae   pyserver      ...   8000/tcp   angry_chaum
Docker 进阶

让端口可访问

  • 将主机的临时端口自动映射到容器
    docker run -P pyserver
    
docker ps -a
CONTAINER ID   IMAGE      ...   PORTS                     NAMES
6bb458ef25da   pyserver   ...   0.0.0.0:55001->8000/tcp   beautiful_lamarr
Docker 进阶

查找已暴露的端口

  • docker inspect 提供大量信息
    docker inspect <id>
    
"NetworkSettings": {
  "Bridge": "",
  "Ports": {
    "8000/tcp": [{
                   "HostIp": "0.0.0.0",
                   "HostPort": "55001"
                    }]
            },
...
Docker 进阶

开始练习!

Docker 进阶

Preparing Video For Download...