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