如何修改正在運行的docker鏡像的端口映射?

在docker run建立並運行容器的時候,能夠經過-p指定端口映射規則。可是,頗有可能剛開始你忘記設置了,或者說設置錯了須要修改。sql

docker start運行容器並無提供一個-p選項,讓你指定端口映射規則。一個解決方案就是把原來的容器刪掉,從新建一個。docker

要是無狀態的應用類鏡像還好,若是是數據庫鏡像,那從新建一個簡直就是nightmare:)啊數據庫

下面我列出幾種解決方案:json

方法一:修改鏡像配置文件,重啓docker

容器的配置文件在bash

/var/lib/docker/containers/[hash_of_the_container]/hostconfig.json
複製代碼

其中的hash_of_the_container是docker鏡像的hash值,能夠經過docker ps或者docker inspect container_name查看。微信

其中有一項是PortBindings,例如上面這個例子中,5432/tcp對應的是容器內部的5432端口,HostPort對應的是映射到宿主機的端口,把這個數字修改一下就能夠了。而後重啓docker服務:tcp

systemctl restart docker
複製代碼

最後start docker鏡像。測試

這個方法的好處是沒有反作用,操做也很簡單,缺點是須要重啓整個docker服務,若是在同一個宿主機上運行着不少鏡像的話,有可能會影響其餘容器的服務。spa

方法二:利用docker commit

第一步:中止docker容器rest

docker stop container01
複製代碼

第二步:commit該docker容器

docker commit container01 new_image:tag
複製代碼

docker commit:把一個容器的文件改動和配置信息commit到一個新的鏡像。這在測試的時候會頗有用,把容器全部的文件改動核配置信息導入到一個嶄新的dockers鏡像,而後用這個鏡像起一個容器,這對以前的那個容器不會產生任何影響。須要注意的是:

第三步:用前一步新生成的鏡像從新起一個容器

docker run --name container02 -p 80:80 new_image:tag
複製代碼

這種方法的好處是不會影響統一宿主機上的其餘容器,缺點是管理起來顯得一團糟,不像第一種方法那麼直觀。

我通常偏好於第一種方法,可是若是在不能影響統一宿主機上其餘服務的狀況下,也只能採起第二種方法。

關注個人微信公衆號

相關文章
相關標籤/搜索