容器未啟動?
如果你的容器還沒有建構時,想添加端口映射時,你隻需要在建立容器的時候添加
-p
參數,想添加幾個端口映射就追加幾個
-p
參數。類似于如下示例:
docker run --name api_dfo_hyperf_ws \
-v /Users/pudongping/glory/codes/dfo/api_dfo_hyperf:/api_dfo_hyperf \
-p 9502:9502 \
-p 9503:9503 \
-p 9504:9504 \
-p 9505:9505 -it \
--entrypoint /bin/sh \
容器已啟動?
但是想修改或者添加端口時,先停止掉正在運作的容器。
以下内容都是以容器 id 為 cbe26510c276
進行操作的,請務必将容器 id 換成你自己需要修改的容器 id。
docker stop {容器的名稱或者 id }
比如:
docker
檢視容器完整的
hash_of_the_container
數值:
docker inspect {容器的名稱或者 id } | grep Id
# 比如:
docker inspect cbe26510c276 | grep Id
# 會得到如下結果:
# "Id": "cbe26510c276fa9a4487a8c2af8cbb49410f2a5305149d2b26eb8ce37c777d00"
打開
hostconfig.json
配置檔案
vim /var/lib/docker/containers/{hash_of_the_container}/hostconfig.json
比如:
vim
如果你不想先檢視完整的容器
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
然後再去編輯
hostconfig.json
配置檔案:
vim
修改 hostconfig.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
service docker restart
# 或者
systemctl restart docker
檢視容器相關配置資訊:
docker inspect {容器的名稱或者 id }
# 比如:
docker
配置符合你的要求後,再次啟動容器:
docker start {容器的名稱或者 id }
# 比如:
docker
Docker Desktop for Mac
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,已經非常小了。
docker run -it --rm --privileged --pid=host justincormack/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