Docker添加或者更改容器的端口映射
QUESTION:Docker添加或者更改容器的端口映射?
?
ANSWER:
初學Docker容器,按照教程的基本命令,拉取創建了幾個容器,都是在一開始新建的時候 docker? run -p 指定對應的端口,但對于docker start 沒有這個功能,所以查詢了以下幾種方法。
?
方法一:刪除原有容器,重新建新容器
這個解決方案最為簡單,把原來的容器刪掉,重新建一個。當然這次不要忘記加上端口映射。
優缺點:優點是簡單快捷,在測試環境使用較多。缺點是如果是數據庫鏡像,那重新建一個又要重新配置一次,就比較麻煩了。
?
方法二:修改容器配置文件,重啟docker服務
找到/var/lib/docker/containers/[hash_of_the_container]/hostconfig.json,hash_of_the_container 可以通過?docker inspect 容器名字,id 就是 容器的 hash 數值,在?hostconfig.json?里有?"PortBindings":{}?這個配置項,
可以改成 "PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"33306"}]} 這里 3306是容器端口, 33306是本地端口, 然后在 config.v2.json 里面添加一個配置項 "ExposedPorts":{"80/tcp":{}} , 將這個配置項添加到 "Tty": true, 前面,我不知道添加到別的地方會不會有影響,因為經過對比正常的端口映射配置項是在這個位置,這個就是將容器內部端口暴露出來,如果不加這一句端口映射不會成功的,最后重啟 docker的守護進程 service docker restart。
?
?優缺點:這個方法的優點是沒有副作用,操作簡單。缺點是需要重啟整個docker服務,如果在同一個宿主機上運行著多個容器服務的話,就會影響其他容器服務。
?
方法三:利用docker commit新構鏡像
1、停止docker容器
?
2、commit該docker容器
?
3、用前一步新生成的鏡像重新起一個容器
?
? ? 優缺點:這種方式的優點是不會影響統一宿主機上的其他容器,缺點是管理起來顯得比較亂,沒有第二種方法那么直觀。
?
方法四:主機與docker中的端口轉發是通過主機的iptables實現的
?
添加端口映射
獲取容器ip docker inspect $container_name | grep IPAddress 添加轉發規則 iptables -t nat -A DOCKER -p tcp --dport $host_port -j DNAT --to-destination $docker_ip:$docker_port刪除端口映射規則
?
a. 獲取規則編號 iptables -t nat -nL --line-number b. 根據編號刪除規則 iptables -t nat -D DOCKER $num?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Docker添加或者更改容器的端口映射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django - 内置admin
- 下一篇: 规则引导的知识图谱联合嵌入方法