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

news/2024/11/30 0:31:43/

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.ppmy.cn/news/1551045.html

相关文章

docker镜像、容器、仓库介绍

docker docker介绍docker镜像命令docker容器命令docker仓库 docker介绍 官网 Docker 是一种开源的容器化平台,用于开发、部署和运行应用。它通过将应用程序及其依赖项打包到称为“容器”的单一包中,使得应用能够在任何环境下运行,不受底层系…

量化交易系统开发-实时行情自动化交易-4.5.1.机器学习策略实现

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来继续说说机器学习策略实现。 机…

[js] 函数柯里化

面试题:实现一个add方法,使计算结果能够满足如下预期: add(1)(2)(3) 6; add(1, 2, 3)(4) 10; add(1)(2)(3)(4)(5) 15; // 保存不定长参数 let nums []; function add(...args) { // 往数组中插入不定长参数nums.push(...args)// 判断参数…

Hive 函数(实例操作版2)

数据脱敏函数 -- 演示数据脱敏函数 -- mask_hash: 返回指定字符串的hash编码 select mask_hash(binzi);-- 拓展 --将查询回的数据,大写字母转换为X,小写字母转换为x,数字转换为n。 select mask("abc123DEF"); -- xxxnnnXXX--自定…

Epipolar-Free 3D Gaussian Splatting for Generalizable Novel View Synthesis 论文解读

目录 一、概述 二、相关工作 1、单场景3DGS 2、跨场景生成3DGS 3、几何方法解决3D任务 三、eFreeSplat 1、预训练跨视角模块 2、无外极线跨视角交互感知模块 3、迭代跨视角高斯对齐 4、高斯参数预测 一、概述 该论文设计了一种不依赖于极线约束的情况实现可推广的新视…

力扣第 72 题 编辑距离

一、题目描述 给你两个单词 word1 和 word2,请返回将 word1 转换为 word2 所使用的最少操作数。 你可以对一个单词进行如下三种操作: 插入一个字符;删除一个字符;替换一个字符。 二、解题思路 1. 问题分析 这是一个最优子结构…

Chrome://常用的内部页面地址

Chrome浏览器提供了一系列特殊的内部页面来用于开发和调试,可以通过在地址栏中输入以chrome://开头的协议来访问。 这些页面用于各种高级设置、实验性功能、诊断信息和浏览器工具等。 一些常用的内部页面: 协议用途chrome://settings/打开Chrome的设置…

量化交易系统开发-实时行情自动化交易-8.1.TradingView平台

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于TradingView平台介绍。 T…