首頁/ 汽車/ 正文

騷操作!居然能修改已執行的 Docker 容器埠對映?

騷操作!居然能修改已執行的 Docker 容器埠對映?

容器未啟動?

如果你的容器還沒有構建時,想新增埠對映時,你只需要在建立容器的時候新增

-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”: {}

相關之處。

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

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

# 重啟 dockerservice 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。jsonvi /var/lib/docker/containers/a7377587b9f08cfe87af9a8ffa4da0f90bf07fb0a1cd6833a5ffcd9c37b842d0/hostconfig。json

免責宣告:本文內容來源於網路,所載內容僅供參考。轉載僅為學習和交流之目的,如無意中侵犯您的合法權益,請及時聯絡Docker中文社群!

相關文章

頂部