進階應用
存取 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 更新
No Comments