在使用 Docker 時,有時會遇到當初開啟 Container 時沒有預期到的 Port Mapping 需求
例如我有個服務本來是把 443 port 轉到 11111 port,但因為想要做 SSL 測試,而測試網站只支援 443 port
因此至少在測試階段需要把服務開回到 443 port 上。
一般查到的作法不外乎是把既有的 Container 做成 image,然後重開一個新的
不過發現另一個方法,可以透過改設定的方式,在不需要重開 Container 的情況下就達到變更的目的。
參考 [1] 的第三個回應,流程如下:
- 停止 Container
- 更新 /var/lib/docker/containers/[hash_of_the_container]/hostconfig.json
- 重新啟動 Docker 引擎
- 啟動 Container
舉例來說,本來我的 Container 的狀態如下:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 38b1f1511577 ubuntu:14.04 "/bin/bash" 9 months ago Up 4 weeks 0.0.0.0:11111->443/tcp service
可以看到 hash 是 38b1… 開頭,並且目前是 Host 主機的 11111 port 對應到 Container 的 443 port。
首先要先把 Container 停止~。
docker stop service
接著就進入 /var/lib/docker/containers/ 目錄,然後找到開頭是 38b1…. 的資料夾,編輯裡面的 hostconfig.json
可以找到 JSON 內容中有一段這樣的內容:
{ .... "PortBindings": { "443/tcp": [{ "HostIp": "", "HostPort": "11111" }] }, .... }
因為我的目的是要增加 443 -> 443 的設定,因此直接在裡面追加另一個 Port Mapping:
{ .... "PortBindings": { "443/tcp": [{ "HostIp": "", "HostPort": "11111" }, { "HostIp": "", "HostPort": "443" }] }, .... }
改完並儲存之後,重新啟動 Docker 引擎,並且打開 Container 後就完成了。
service docker restart docker start service
最後看一下改完的結果:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 38b1f1511577 ubuntu:14.04 "/bin/bash" 9 months ago Up 23 minutes 0.0.0.0:443->443/tcp, 0.0.0.0:11111->443/tcp service
沒有留言:
張貼留言