如何修改Docker容器埠對映?

Linksla發表於2022-08-18

容器未啟動?

如果你的容器還沒有構建時,想新增埠對映時,你只需要在建立容器的時候新增  -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 \
alex/alex_api_dfo:v1.0

容器已啟動?

但是想修改或者新增埠時,先停止掉正在執行的容器。

以下內容都是以容器 id 為  cbe26510c276 進行操作的,請務必將容器 id 換成你自己需要修改的容器 id。


docker stop {容器的名稱或者 id }

比如:


docker stop cbe26510c276

檢視容器完整的  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 /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 配置檔案:


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": {} 相關之處。

Docker+K8s+Jenkins 主流技術全解影片資料


{

     "Args": [],
     "Config": {
         "ExposedPorts": {
             "8502/tcp": {},
             "8505/tcp": {}
        },
         "Entrypoint": [
             "/bin/sh"
        ]
    }
}

最後重啟 docker,然後檢視容器相關配置資訊是否已經修改完畢





#
 重啟 docker
service docker restart
#  或者
systemctl restart docker

檢視容器相關配置資訊:


docker inspect {容器的名稱或者 id }

#  比如:
docker inspect cbe26510c276

配置符合你的要求後,再次啟動容器:


docker start {容器的名稱或者 id }

#  比如:
docker start cbe26510c276

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 /var/lib/docker/containers/a7377587b9f08cfe87af9a8ffa4da0f90bf07fb0a1cd6833a5ffcd9c37b842d0/hostcon


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70013542/viewspace-2910994/,如需轉載,請註明出處,否則將追究法律責任。

相關文章