• docker容器添加对外映射端口


    首次启动容器指定映射端口

    在容器首次启动是,可通过-p参数(-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如:

    docker run -it -d --name [container-name] -p 8088:80 [image-name]
    
    • 1

    上述命令将容器内的80端口映射到宿主机的8088端口。

    参数说明

    • -d 表示后台运行容器
    • -t 为docker分配一个伪终端并绑定到容器的标准输入上
    • -i 是让容器的标准输入保持打开状态
    • -p 指定映射端口

    新增映射端口

    当容器已经运行之后,且容器中已经有配置改动,不方便重新创建逐一修改配置时,则可通过两种方式新增端口映射

    方式一:打包新镜像

    如果正在运行的容器已经修改了很多配置,重新创建镜像,修改配置比较麻烦时,可在现有的容器基础上打包一个镜像。

    然后在运行新镜像时进行端口映射的新增或修改。

    基本步骤:

    停止指定容器:

    docker stop container-name
    
    • 1

    将容器commit成为一个镜像:

    docker commit -m "New image with my changes" my-container my-new-image
    
    • 1

    提交时可以添加一些说明信息,比如使用 -m 选项后面跟的字符串。

    需要注意的是,容器在提交之前需要先停止。如果容器正在运行,则提交操作将失败。此外,提交的容器必须是基于一个基础镜像构建的,否则提交操作也将失败。

    用新镜像运行容器:

    docker run -it -d --name container-name -p p1:p1 -p p2:p2 new-image-name
    
    • 1

    至此,原有容器内配置不变,在启动时进行了新的端口映射。

    方式二:修改配置文件

    修改配置文件,此种方式稍微有些麻烦,而且在操作过程中需要把的docker服务停掉,使用时需注意。

    查看容器信息:

    docker ps -a
    
    • 1

    查看容器的端口映射情况,在容器外执行:

    docker port d5104ec757b6
    # 或
    docker port nginx
    
    • 1
    • 2
    • 3

    查找要修改容器的容器Id:

    docker inspect d5104ec757b6 |grep Id
    
    • 1

    执行命令结果:

    "Id": "d5104ec757b667d5647c61c9d6066fc9b7b3a675eaba6af4dc990989f78e99b7",
    
    • 1

    不同的容器Id不同,然后在/var/lib/docker/containers目录下找到与上述Id相同的目录,修改该目录下的 hostconfig.json 和 config.v2.json文件。

    在修改之前,还需要停到容器和docker服务。

    停掉容器:

    docker stop d5104ec757b6
    
    • 1

    停掉docker服务:

    systemctl stop docker
    
    • 1

    修改hostconfig.json,添加端口绑定"443/tcp": [{“HostIp”: “”,“HostPort”: “443”}],表示绑定端口443:

    "PortBindings":{
    	"443/tcp":[{"HostIp":"","HostPort":"443"}],
     	"80/tcp":[{"HostIp":"","HostPort":"80"}]
     }
    
    • 1
    • 2
    • 3
    • 4

    找到key为PortBindings的配置,在其value部分中新增了443相关的配置。

    修改config.v2.json文件,在ExposedPorts中加上要暴露的端口,即443:

    "ExposedPorts":{"443/tcp":{},"80/tcp":{}}
    
    • 1

    找到key为ExposedPorts的配置,在其value部分新增443的配置。

    保持配置文件,重启docker服务和容器:

    systemctl start docker
    docker start d5104ec757b6
    
    • 1
    • 2

    此时,再用前面提到的docker port命令即可看到新增的端口已经绑定成功。

  • 相关阅读:
    搭建SNMP服务器
    MySQL 表的约束
    算法组-异或运算与面试题
    MapReduce综合应用案例 — 招聘数据清洗
    根据MediatR的Contract Messages自动生成Minimal WebApi接口
    centos7中多版本go安装
    Python案例|使用Scikit-learn进行房屋租金回归分析
    Mysql 中遇到的坑
    Cisco Secure Firewall ASA 9.18.1 (bin, ova, qcow2, SPA, vhd)
    Java --- UDP 通信 DatagramSocket DatagramPacket 使用 完整步骤
  • 原文地址:https://blog.csdn.net/wo541075754/article/details/132731207