当前位置: 首页 > article >正文

追加docker已运行容器添加或修改端口映射方法

docker run可以指定端口映射

【】docker run -d -p 80:80 --name name
但是容器一旦生成,就没有一个命令可以直接修改。通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射。

【】 docker stop A
【】 docker commit A imageA #将容器commit提交成为一个镜像
【】 docker rm A #删除原镜像
【】 docker run -d -p 80:80 --name A imageA #启动新镜像
但这样太麻烦了。现在有新方案来解决掉:
## 查看id 就是 容器的 hash_of_the_container 数值
【】docker inspect 容器id 第一个ID就是完整的容器id

修改容器的配置, 需要重启 DOCKER 服务, 否则会失败
停止容器, 停止服务 (systemctl stop docker 或 service docker stop)

## 修改hostconfig.json
【】vim /var/lib/docker/containers/[hash_of_the_container]/hostconfig.json
在 hostconfig.json 里有 "PortBindings":{} 这个配置项,可以改成 "PortBindings":{"80/tcp":[{"HostIp":"0.0.0.0","HostPort":"8080"}]}

例 hostconfig.json 已删除不相关配置, 只保留格式

{
    "PortBindings": {
        "5700/tcp": [{
            "HostIp": "",
            "HostPort": "10086"
        }],
        "6700/tcp": [{
            "HostIp": "",
            "HostPort": "6700"
        }],
        "9000/tcp": [{
            "HostIp": "",
            "HostPort": "8080"
        }]
    }
}
## 修改config.v2.json
【】vim /var/lib/docker/containers/[hash_of_the_container]/config.v2.json
如果没有ExposedPorts 在 config.v2.json 里面添加一个配置项 "ExposedPorts":{"80/tcp":{}} , 将这个配置项添加到 "Tty": true, 前面,如果有就添加 "80/tcp":{} 端口即可。

例 config.v2.json 已删除不相关配置, 只保留格式

{
    "Config": {
        "ExposedPorts": {
            "5700/tcp": {},
            "6700/tcp": {},
            "9000/tcp": {}
        }
    }

## 最后重启服务, 启动容器 (systemctl start docker/service docker start)
## 查看配置项已经修改成功
docker inspect 容器id

防火墙修改

如果安装了防火墙 Iptables 还有个不需要修改即可端口映射的临时方法:

查看容器ID的IP地址:docker inspect 容器id | grep IPAddress

该命令获取了docker容器的在宿主机里的真实ip,然后使用宿主机的端口转发功能iptables

【】iptables -t nat -A DOCKER -p tcp --dport 宿主机端口 -j DNAT --to-destination 容器ip:容器端口
,注意这个方法并不是docker的命令,所以他扩展出的端口不在docker port命令列表里面。

查看所有容器内ip

【】docker inspect --format='{{.NetworkSettings.IPAddress}}' $(docker ps -a -q)
有时候,我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动,可docker命令修改 

【】docker container update --restart=always 容器名字
停止所有容器命令:

【】sudo docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
启动所有容器命令:

【】sudo docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)


http://www.kler.cn/a/413653.html

相关文章:

  • 【Vue】Keep alive详解
  • c++趣味编程玩转物联网:基于树莓派Pico控制有源蜂鸣器
  • 【Threejs进阶教程-着色器篇】9.顶点着色器入门
  • 数据结构 ——— 归并排序算法的实现
  • 【大数据学习 | Spark-SQL】SparkSQL读写数据
  • 数据结构C语言描述5(图文结合)--广义表讲解与实现
  • 可视化绘图技巧100篇基础篇(十)-堆叠条形图(stacked bar)(二)
  • Unity-Lightmap入门篇
  • Mongodb入门到放弃
  • vue3 开发利器——unplugin-auto-import
  • React Hooks中use的细节
  • 【探寻密码的奥秘】-001:解开密码的神秘面纱
  • Spring MVC:原理、配置与基础应用详解
  • 【人工智能】Python常用库-Scikit-learn常用方法教程
  • 泷羽sec学习打卡-shell命令2
  • 【webrtc】 mediasoup中m77的IntervalBudget及其在AlrDetector的应用
  • Day3 苍穹外卖项目 公共字段自动填充(AOP)、文件上传、新增菜品、菜品分页查询、删除菜品、修改菜品
  • 【linux】手搓线程池
  • 彻底理解微服务的作用和解决方案
  • JS听到了替罪的回响
  • Flink 之 Window 机制详解(上):基础概念与分类
  • java基础知识(Arrays类)
  • Java爬虫:深入解析商品详情的利器
  • 基于Springboot的流浪宠物管理系统
  • Vue.js 中 v-for 指令与 JavaScript 数组方法
  • Nvidia的hami是什么,以及如何再K8S中起作用