1. 程式人生 > >Docker(33)- 如何修改 docker 容器的埠對映

Docker(33)- 如何修改 docker 容器的埠對映

如果你還想從頭學起 Docker,可以看看這個系列的文章哦!

https://www.cnblogs.com/poloyy/category/1870863.html

 

問題背景

docker run -d -p 9999:8080 -i --name tomcat7 tomcat:7
  • 建立容器時,指定了埠對映(-p)
  • 如果容器執行之後發現埠需要改怎麼辦?

 

當前是訪問 9999 埠

 

刪除原有容器,重新建立新的容器

刪除容器

docker rm -f 容器ID/名字

 

重新建立容器

docker run -d -p 8888:8080 -i --name tomcat7 tomcat:7

重新指定需要對映的埠

 

優點

簡單粗暴,在測試環境用的更多

 

缺點

如果是資料庫、伺服器相關的容器,建立新的容器,又得重新配置相關東西了

 

修改容器配置檔案(重點)

暫停 Docker 服務

systemctl stop docker

 

進入 Docker 容器配置檔案目錄下

cd /var/lib/docker/containers/
ls

 

進入某個容器的配置檔案目錄下

容器ID 就是資料夾名稱,可通過 docker ps -aq 來檢視,不過這是縮寫,對照起來看就行

cd c614b6db4aed0c8d0c742baa09ff4e2c24761703586460b68633d7b66e62c633
ls

 

修改 hostconfig.json

vim hostconfig.json

 

  • 輸入 / ,搜尋對映的埠(9999)
  • 修改埠值就行了
  • 修改完後 :wq 退出並儲存此檔案

 

重新啟動 Docker 服務

systemctl stop docker
docker start tomcat7
docker ps

訪問 8888 埠沒問題!

 

注意

  • 如果想修改 Docker 容器隨著 Docker 服務啟動而自啟動,可看:https://www.cnblogs.com/poloyy/p/13985567.html
  • 有些文章會寫到還需要改  config.v2.json 裡的埠,但實操了一遍並不需要

 

優點

直接操作配置檔案沒有副作用,算簡單

 

缺點

需要暫停 Docker 服務,會影響其他正常執行的 Docker 容器

 

使用 docker commit 命令

停止 Docker 容器

docker stop tomcat7

 

使用 commit 構建新映象

docker commit tomcat7 new_tomcat7
docker images

 

使用新映象重新建立一個 Docker 容器

docker run -d -p 8888:8080 -i --name tomcat77 new_tomcat7
docker ps 

 

修改新容器的名字

如果新容器想用回舊容器的名字,需要先刪了舊容器,再改名

docker rm -f tomcat7
docker rename tomcat77 tomcat7
docker ps

 

優點

  • 無需停止 Docker 服務,不影響其他正在執行的容器
  • 舊容器有的配置和資料,新容器也會有,不會造成資料或配置丟失,對新舊容器都沒有任何影響

 

缺點

需要生成新的映象和容器,管理映象和容器的時間成本會上升

 

修改主機 iptables 埠對映

網上很多文章都有這個方法,但是我實操了一遍是不行的,不知道是不是步驟錯了,哪位大佬知道可否說一聲捏

&n