如何修改正在執行的docker映象的埠對映?

liaochangjiang發表於2019-02-07

在docker run建立並執行容器的時候,可以通過-p指定埠對映規則。但是,很有可能剛開始你忘記設定了,或者說設定錯了需要修改。

docker start執行容器並沒有提供一個-p選項,讓你指定埠對映規則。一個解決方案就是把原來的容器刪掉,重新建一個。

要是無狀態的應用類映象還好,如果是資料庫映象,那重新建一個簡直就是nightmare:)啊

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

方法一:修改映象配置檔案,重啟docker

容器的配置檔案在

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

其中的hash_of_the_container是docker映象的hash值,可以通過docker ps或者docker inspect container_name檢視。

如何修改正在執行的docker映象的埠對映?

其中有一項是PortBindings,例如上面這個例子中,5432/tcp對應的是容器內部的5432埠,HostPort對應的是對映到宿主機的埠,把這個數字修改一下就可以了。然後重啟docker服務:

systemctl restart docker
複製程式碼

最後start docker映象。

這個方法的好處是沒有副作用,操作也很簡單,缺點是需要重啟整個docker服務,如果在同一個宿主機上執行著很多映象的話,有可能會影響其他容器的服務。

方法二:利用docker commit

第一步:停止docker容器

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
複製程式碼

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

我一般偏好於第一種方法,但是如果在不能影響統一宿主機上其他服務的情況下,也只能採取第二種方法。

關注我的微信公眾號

如何修改正在執行的docker映象的埠對映?

相關文章