Docker容器添加新的端口


注:此處以 Ubuntu 鏡像為例

方法一 :將容器提交為新的鏡像之后運行鏡像並添加端口

1.將容器打包成鏡像

docker commit :從容器創建一個新的鏡像。
語法
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS說明:
    • -a :提交的鏡像作者;
    • -c :使用Dockerfile指令來創建鏡像;
    • -m :提交時的說明文字;
    • -p :在commit時,將容器暫停。

docker commit -m 'no port' ubuntu np-ubuntu:v1

2.運行鏡像並添加端口

docker run -itd --name=ubuntu1 -p 5022:22 np-ubuntu:v1 /bin/bash

5022:22 代表:主機端口:容器內部的端口

 執行示例如下:

 方法二:端口轉發

1. 獲取容器IP

docker inspect : 獲取容器/鏡像的元數據。
語法
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
    
OPTIONS說明:
-f :指定返回值的模板文件。
-s :顯示總的文件大小。
--type :為指定類型返回JSON。
docker inspect `container_name` | grep IPAddress1

docker inspect ubuntu | grep IPAddress

注:容器需在運行中

2. iptable轉發端口

iptables詳解請參考:iptables入門指南 --- iptables詳解 ---iptbales 防火牆

將容器的 22 端口映射到docker主機的 6022 端口

iptables -t nat -A  DOCKER -p tcp --dport 6022 -j DNAT --to-destination 172.17.0.2:22

執行示例如下:

 

 補充:

查看iptables到底設置了什么規則
sudo iptables -t nat -vnL
如果加錯了或者想修改:
先顯示行號查看
sudo iptables -t nat -vnL DOCKER --line-number
刪除規則3
sudo iptables -t nat -D DOCKER 3 

操作示例如下:

 方法三:修改容器對應的配置文件

即:修改/var/lib/docker/containers/[containerId]目錄下,hostconfig.jsonconfig.v2.json 兩個配置文件。

1. 停止容器,停止docker服務

docker stop container_id

systemctl stop docker

 2. 修改配置文件

2.1 修改 hostconfig.json文件,修改點

hostconfig.json 里有 "PortBindings":{} 這個配置項,可以改成"PortBindings":{"22/tcp":[{"HostIp":"","HostPort":"5022"}]} 這里 22 是容器端口, 5022 是本地端口

 2.2 修改 config.v2.json 文件,修改點

config.v2.json 里面添加一個配置項 "ExposedPorts":{"22/tcp":{}}

配置項 "Ports": {} 修改成 "Ports": {"22/tcp": [{"HostIp": "0.0.0.0","HostPort": "5022"}]}

 :修改配置文件前必須先停掉容器及docker服務否則修改將無效


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM