使用 Dockerfile 開放連接埠

Docker 中級

Mike Metzger

Data Engineer

對外開放服務

  • EXPOSE 指令
  • 定義容器在執行時會使用的連接埠
  • 可寫為 <number><number>/tcp、或 <number>/udp
    • 例如 EXPOSE 80EXPOSE 80/tcp
  • 可宣告多個條目
  • 作為文件化用途
Docker 中級

使用 -p / -P 旗標

  • 仍需在 docker run 使用 -p-P 才能讓連接埠對容器外可用
  • -P 會自動把臨時連接埠對應到已 EXPOSE 的連接埠。需用 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...