在docker run建立並運行容器的時候,能夠經過-p指定端口映射規則。可是,頗有可能剛開始你忘記設置了,或者說設置錯了須要修改。sql
docker start運行容器並無提供一個-p選項,讓你指定端口映射規則。一個解決方案就是把原來的容器刪掉,從新建一個。docker
要是無狀態的應用類鏡像還好,若是是數據庫鏡像,那從新建一個簡直就是nightmare:)啊數據庫
下面我列出幾種解決方案:json
容器的配置文件在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容器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
複製代碼
這種方法的好處是不會影響統一宿主機上的其餘容器,缺點是管理起來顯得一團糟,不像第一種方法那麼直觀。
我通常偏好於第一種方法,可是若是在不能影響統一宿主機上其餘服務的狀況下,也只能採起第二種方法。
關注個人微信公衆號