在使用 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 的狀態如下:
1 2 |
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 停止~。
1 |
docker stop service |
接著就進入 /var/lib/docker/containers/ 目錄,然後找到開頭是 38b1…. 的資料夾,編輯裡面的 hostconfig.json
可以找到 JSON 內容中有一段這樣的內容:
1 2 3 4 5 6 7 8 9 10 |
{ .... "PortBindings" : { "443/tcp" : [{ "HostIp" : "" , "HostPort" : "11111" }] }, .... } |
因為我的目的是要增加 443 -> 443 的設定,因此直接在裡面追加另一個 Port Mapping:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ .... "PortBindings" : { "443/tcp" : [{ "HostIp" : "" , "HostPort" : "11111" }, { "HostIp" : "" , "HostPort" : "443" }] }, .... } |
改完並儲存之後,重新啟動 Docker 引擎,並且打開 Container 後就完成了。
1 2 |
service docker restart docker start service |
最後看一下改完的結果:
1 2 |
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 |
沒有留言:
張貼留言