前言
假如某一天,你突然想改變 port 的對應或者是新增或移除 port ,該怎麼做呢?
理論上 Container 為一次性的概念,所以當要改設定時,建議建立新的 Container 較為恰當。
方法
方法一:重建 Container
如前言所說,這是推薦方法。
停止要修改的 Container
1
| sudo docker stop <Container ID or Name>
|
把 Container 建成 Image
1
| sudo docker commit <Container ID or Name> <Image ID>
|
把剛剛創的 Image 重新建立新的 Container 並指定所需的 Port
1
| sudo docker run -it --name <Container Name> -p <Host>:<Container> <Image ID> bash
|
方法二:修改 Container
停止要修改的 Container
1
| sudo docker stop <Container ID or Name>
|
進入 root 帳號
修改 Container 的設定檔 hostconfig.json
1
| vim /var/lib/docker/containers/<Container ID>/hostconfig.json
|
假設原本的 port 對應為 9453 → 22
1 2 3 4 5 6 7 8 9 10
| { "PortBindings": { "22/tcp": [ { "HostIp": "", "HostPort": "9453" } ] } }
|
改成 8888 → 22 ,其他以此類推
1 2 3 4 5 6 7 8 9 10
| { "PortBindings": { "22/tcp": [ { "HostIp": "", "HostPort": "8888" } ] } }
|
修改 Container 的設定檔 config.v2.json
1
| vim /var/lib/docker/containers/<Container ID>/config.v2.json
|
假設原本的 port 對應為 9453 → 22
1 2 3 4 5 6 7 8
| { "ExposedPorts" : { "22/tcp":{},"9453/tcp":{} }, "Ports" : { "22/tcp":[{"HostIp":"0.0.0.0","HostPort":"9453"}] } }
|
改成 8888 → 22 ,其他以此類推
1 2 3 4 5 6 7 8
| { "ExposedPorts" : { "22/tcp":{},"8888/tcp":{} }, "Ports" : { "22/tcp":[{"HostIp":"0.0.0.0","HostPort":"8888"}] } }
|
重啟 Docker Engine
離開 root 帳號及重新啟動 Container
1 2
| exit sudo docker start <Container ID or Name>
|