進階應用 存取 Container 網路 有個 Container 服務只需要與同個 Docker Network 的其他 Container 做通訊,平常不需要對外開放通訊埠,只有在開發或 Debug 時才需要從外部存取這個 Container 的網路,但又不想每次都要重啟 container 來開啟關閉需要的 port。 使用一個 socat 的 forwarder container,將外部 port 導入內部目的 container 的 port。 # 以 Nginx Web 為例 $ docker run -d --name target nginx $ TARGET_IP=$( docker inspect \ -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \ target ) $ NETWORK=$( docker container inspect \ -f '{{range $net,$v := .NetworkSettings.Networks}}{{printf "%s" $net}}{{end}}' \ target ) $ docker run -d \ --publish ${HOST_PORT}:${TARGET_PORT} \ --network ${NETWORK} \ --name forwarder nixery.dev/socat \ socat TCP-LISTEN:${TARGET_PORT},fork TCP-CONNECT:${TARGET_IP}:${TARGET_PORT} $ curl localhost:${TARGET_PORT} 不停機做 Container 更新 Updating Docker Containers With Zero Downtime (linuxhandbook.com)