在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檢視。
其中有一項是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
複製程式碼
這種方法的好處是不會影響統一宿主機上的其他容器,缺點是管理起來顯得一團糟,不像第一種方法那麼直觀。
我一般偏好於第一種方法,但是如果在不能影響統一宿主機上其他服務的情況下,也只能採取第二種方法。
關注我的微信公眾號