容器未啟動?
如果你的容器還沒有構建時,想添加端口映射時,你只需要在創建容器的時候添加 -p 參數,想添加幾個端口映射就追加幾個 -p 參數。類似于如下示例:
dockerrun--nameapi_dfo_hyperf_ws
-v/Users/pudongping/glory/codes/dfo/api_dfo_hyperf:/api_dfo_hyperf
-p9502:9502
-p9503:9503
-p9504:9504
-p9505:9505-it
--entrypoint/bin/sh
alex/alex_api_dfo:v1.0
容器已啟動?
但是想修改或者添加端口時,先停止掉正在運行的容器。
以下內容都是以容器 id 為 cbe26510c276 進行操作的,請務必將容器 id 換成你自己需要修改的容器 id。
dockerstop{容器的名稱或者id}
比如:
dockerstopcbe26510c276
查看容器完整的 hash_of_the_container 數值:
dockerinspect{容器的名稱或者id}|grepId
#比如:
dockerinspectcbe26510c276|grepId
#會得到如下結果:
#"Id":"cbe26510c276fa9a4487a8c2af8cbb49410f2a5305149d2b26eb8ce37c777d00"
打開 hostconfig.json 配置文件
vim/var/lib/docker/containers/{hash_of_the_container}/hostconfig.json
比如:
vim/var/lib/docker/containers/cbe26510c276fa9a4487a8c2af8cbb49410f2a5305149d2b26eb8ce37c777d00/hostconfig.json
如果你不想先查看完整的容器 hash_of_the_container 數值,你也可以直接先切換到當前容器相關目錄中 cd /var/lib/docker/containers/{hash_of_the_container}* , 然后再去編輯 hostconfig.json 配置文件。
cd/var/lib/docker/containers/{hash_of_the_container}*
比如
cd/var/lib/docker/containers/cbe26510c276*
然后再去編輯 hostconfig.json 配置文件:
vimhostconfig.json
修改 hostconfig.json 配置文件
在 hostconfig.json 配置文件中,找到 "PortBindings":{} 這個配置項,然后進行修改。我這里添加了兩個端口映射,分別將宿主機的 8502 端口以及 8505 端口映射到容器的 8502 端口和 8505 端口。
HostPort 對應的端口代表 宿主機 的端口。
建議容器使用什么端口,宿主機就映射什么端口,方便以后管理。當然,具體情況,具體分析。
{
"PortBindings":{
"8502/tcp":[
{
"HostIp":"",
"HostPort":"8502"
}
],
"8505/tcp":[
{
"HostIp":"",
"HostPort":"8505"
}
]
}
}
如果 config.v2.json 配置文件或者 config.json 配置文件中也記錄了端口,也需要進行修改,如果沒有,就不需要改。
只需要修改 "ExposedPorts": {} 相關之處。
{
"Args":[],
"Config":{
"ExposedPorts":{
"8502/tcp":{},
"8505/tcp":{}
},
"Entrypoint":[
"/bin/sh"
]
}
}
最后重啟 docker,然后查看容器相關配置信息是否已經修改完畢
#重啟docker
servicedockerrestart
#或者
systemctlrestartdocker
查看容器相關配置信息:
dockerinspect{容器的名稱或者id}
#比如:
dockerinspectcbe26510c276
配置符合你的要求后,再次啟動容器:
dockerstart{容器的名稱或者id}
#比如:
dockerstartcbe26510c276
Docker Desktop for Mac
How to login the VM of Docker Desktop for Mac
因為在 Docker for MacOS 中,容器的宿主機并不是 MacOS 本身,而是在 MacOS 中運行的一個 VM 虛擬機 。虛擬機的路徑可以通過查看 Docker Desktop 的配置界面 Disk image location 配置獲得。
那么我們如何進入這個虛擬機呢?
最簡單的方式是采用 justincormack/nsenter1 進入,這個鏡像只有 101KB,已經非常小了。
dockerrun-it--rm--privileged--pid=hostjustincormack/nsenter1
- –rm 表示在退出的時候就自動刪除該容器;
- –privileged 表示允許該容器訪問宿主機(也就是我們想要登錄的 VM )中的各種設備;
- –pid=host 表示允許容器共享宿主機的進程命名空間(namespace),或者通俗點兒解釋就是允許容器看到宿主機中的各種進程;
然后再進入 /var/lib/docker/containers 目錄修改 config.v2.json 配置文件和 hostconfig.json 配置文件即可。整體來說,在 MacOS 上除了進入 /var/lib/docker/containers 目錄時,進入方式有所不同以外,修改配置文件方式和上文一樣。需要注意的是,修改的時候請使用 vi 編輯器,因為這個鏡像沒有安裝 vim 編輯器的。
比如:
vi/var/lib/docker/containers/a7377587b9f08cfe87af9a8ffa4da0f90bf07fb0a1cd6833a5ffcd9c37b842d0/config.v2.json
vi/var/lib/docker/containers/a7377587b9f08cfe87af9a8ffa4da0f90bf07fb0a1cd6833a5ffcd9c37b842d0/ho
審核編輯 :李倩
-
端口
+關注
關注
4文章
955瀏覽量
32014 -
容器
+關注
關注
0文章
494瀏覽量
22045 -
Docker
+關注
關注
0文章
454瀏覽量
11815
原文標題:騷操作!居然能修改已運行的 Docker 容器端口映射?
文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論