【docker】如何修改已有容器的端口映射

本文首发于 ❄️慕雪的寒舍

docker修改已有容器的端口映射

参考 https://www.jb51.net/article/257510.htm

1.需求

之前我在我的绿联nas上部署了一个centos容器,当时脑子抽了,没想起来要多映射几个端口。只映射了容器的22端口(ssh)

对于应用开发而言,没有能够直接访问的端口可太蛋疼了。在centos里面开frp穿透出来访问吧,又太麻烦。

如果在绿联的控制台里面修改端口映射,会直接创建一个新的容器,原有容器的信息会丢失。现在这个centos系统已经用了一段时间了,开发环境都配置好了。创建一个新容器就是得重头配置,虽然不是啥难事,但是太耗时间了!!!😥

于是就想着,能否通过修改配置文件的方式,实现修改容器的端口映射。

2.操作

2.1 开启ssh并关闭docker服务

修改之前,需要开启绿联nas的ssh服务。绿联nas如何开启ssh参考 视频 。

链接上ssh之后,先使用docker ps,查看需要修改容器的container id。注意,这里的id并不是完整的容器id,先记录下来。

container id
2b8f29d7b4b0

随后进入绿联的客户端,关闭docker服务;如果是其他linux系统,可以用如下命令关闭docker服务

systemctl stop docker

命令行里面再次执行docker ps,确认docker服务确实已经关闭

$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

如果显示如上,则代表docker并没有在运行。即docker被正常关闭了。

2.2 找到docker安装路径

接下来要做的,就是查看docker安装的位置。对于群晖、威联通、绿联这种nas而言,其系统内对docker安装挂载的位置是不同的。比如绿联的nas自带了16gb的闪存(系统盘),但docker的安装位置并不在这16GB里面,而是在我们用户的硬盘中

一般的Linux系统(以我的云服务器为例),docker的安装位置应该是如下路径

/var/lib/docker

ls查看内部文件,如下

# ls /var/lib/docker
containers  image  network  overlay2  plugins  swarm  tmp  trust  volumes

而绿联的系统并没有这个路径

can't open '/var/lib/docker': No such file or directory

查看/var/lib,并没有发现docker文件夹

# ls /var/lib/
dbus   nginx  samba

查看/var,发现了一个dockerd,猜测这是docker相关文件存放的位置

# ls /var
all_aria2.txt    dockerd          factory

里面只有一个json文件

# ls /var/dockerd
daemon.json

cat命令查看,果不其然,是docker的安装路径

# cat /var/dockerd/daemon.json
{"data-root":"/mnt/media_rw/2550c297-7334-455f-9fce-e0a00aad40c8/.ugreen_nas/6","log-level":"warn","iptables":true,"api-cors-header":"*","host375"],"registry-mirrors":["https://registry.docker-cn.com"]}

这就是docker的安装位置了

/mnt/media_rw/2550c297-7334-455f-9fce-e0a00aad40c8/.ugreen_nas/6

ls查看,文件结构和云服务器的docker安装位置基本一样,这代表我们找对了!

# ls /mnt/media_rw/2550c297-7334-455f-9fce-e0a00aad40c8/.ugreen_nas/6
buildkit    containerd  containers  image       network     overlay2    plugins     runtimes    swarm
tmp        trust       volumes

2.3 找到对应容器的配置文件路径

docker路径下的containers文件夹,包含了不同容器的配置文件夹。ls查看,发现都是一些看不懂的字符串。实际上,这里的字符串就是容器的id

# ls /mnt/media_rw/2550c297-7334-455f-9fce-e0a00aad40c8/.ugreen_nas/6/containers
2b8f29d7b4b0ad624fb02048cb91c569e6e52409fe246e1c741bdd13ed7242cf  9113e1ec4740726feb9623a897f81b9066bc1b63811bfc0a65875d8a2c46c603
47aa763o2da18686c6301047ef57f24fb611a2ebea2066f0dbk68205a40777e3

前面提到,docker ps显示的容器id并不是完整的。因为完整的很长很长,不可能在ps命令里面全显示出来。

我需要修改的目标容器,缩短的id如下,对应的正是containers文件夹里面的第一个文件夹。

2b8f29d7b4b0

用ls看看这个文件夹里面有啥东西

注意:此时命令已经很长很长。避免出错,建议开个记事本,在里面把命令写好,再复制到终端中执行!

ls -l /mnt/media_rw/2550c297-7334-455f-9fce-e0a00aad40c8/.ugreen_nas/6/containers/2b8f29d7b4b0ad624fb02048cb91c569e6e52409fe246e1c741bdd13ed7242cf

得到的文件结构如下,我们需要修改的是config.v2.jsonhostconfig.json

-rw-r-----    1 root     root         87802 Mar 11 18:12 2b8f29d7b4b0ad624fb02048cb91c569e6e52409fe246e1c741bdd13ed7242cf-json.log
drwx------    2 root     root          4096 Feb 23 18:42 checkpoints
-rw-------    1 root     root          3300 Mar 11 18:12 config.v2.json
-rw-r--r--    1 root     root          1925 Mar 11 18:12 hostconfig.json
-rw-r--r--    1 root     root            13 Mar 11 18:12 hostname
-rw-r--r--    1 root     root           174 Mar 11 18:12 hosts
drwx--x---    2 root     root          4096 Feb 23 18:43 mounts
-rw-r--r--    1 root     root            83 Mar 11 18:12 resolv.conf
-rw-r--r--    1 root     root            71 Mar 11 18:12 resolv.conf.hash

2.4 备份

在linux的命令行中操作,备份是必不可少的!使用cp命令,把配置文件复制一份,并在名字中添加上.bak予以区别

cp 源文件 目标文件

以下是cp命令备份config.v2.json文件的命令示例,命令很长!

cp /mnt/media_rw/2550c297-7334-455f-9fce-e0a00aad40c8/.ugreen_nas/6/containers/2b8f29d7b4b0ad624fb02048cb91c569e6e52409fe246e1c741bdd13ed7242cf/config.v2.json /mnt/media_rw/2550c297-7334-455f-9fce-e0a00aad40c8/.ugreen_nas/6/containers/2b8f29d7b4b0ad624fb02048cb91c569e6e52409fe246e1c741bdd13ed7242cf/config.v2.bak.json

备份了我们需要修改的两个文件后,接下来就是修改配置文件了

2.5 修改配置文件

2.5.1 hostconfig.json

使用vim来进行编辑(编辑之前,可以用cat先复制出内容,放到vsc等编辑器中格式化,方便找到对应的位置,或者直接在vscode中修改,然后覆盖回去,都OK)

vim /mnt/media_rw/2550c297-7334-455f-9fce-e0a00aad40c8/.ugreen_nas/6/containers/2b8f29d7b4b0ad624fb02048cb91c569e6e52409fe246e1c741bdd13ed7242cf/hostconfig.json

如下便是要修改的字段,可以看到里面只有对22端口的映射

"PortBindings": {"22/tcp": [{"HostIp": "0.0.0.0","HostPort": "22222"},{"HostIp": "::","HostPort": "22222"}]}

我们照猫画虎,直接添加上另外两个端口的映射。

在英文输入法下,按i进入vim的编辑模式,通过键盘移动光标到指定位置,修改文件

"PortBindings": {"22/tcp": [{"HostIp": "0.0.0.0","HostPort": "22222"},{"HostIp": "::","HostPort": "22222"}],"50000/tcp": [{"HostIp": "0.0.0.0","HostPort": "50000"},{"HostIp": "::","HostPort": "50000"}],"50001/tcp": [{"HostIp": "0.0.0.0","HostPort": "50001"},{"HostIp": "::","HostPort": "50001"}]}

编辑好了之后,按esc退出编辑模式,:wq保存并退出

2.5.2 config.v2.json

这个文件需要修改的是如下字段

"ExposedPorts": {"22/tcp": {}
}

添加上刚刚在hostconfig.json里面新增的端口

"ExposedPorts": {"22/tcp": {},"50000/tcp":{},"50001/tcp":{}
}

同样:wq保存并退出

2.6 现在就已经修改好啦!

相同的文件路径中还有一个hostname文件,可以修改容器的hostname,就是ssh登录docker安装的centos后,显示在用户名@右边的那个

用户名@hostname

用docker安装的centos镜像,是不能在centos系统中修改容器hostname的

在docker安装的centos系统内修改可以,但是不会真正生效;不过这个东西对使用系统毫无影响,所以不修改也没关系

3.重启docker,查看是否修改成功

在绿联客户端里面重启docker服务之后,使用docker ps命令查看端口映射是否修改成功;其他linux系统用如下命令启动docker。

systemctl start docker

如果多出了刚刚我们在配置文件里面修改的50000和50001端口,就代表端口映射修改成功了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/27564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bigtable: A Distributed Storage System for Structured Data

2003年USENIX,出自谷歌,开启分布式大数据时代的三篇论文之一,底层依赖 GFS 存储,上层供 MapReduce 查询使用 Abstract 是一种分布式结构化数据存储管理系统,存储量级是PB级别。存储的数据类型和延时要求差异都很大。…

【数学】【机器学习】什么是隐马尔可夫模型 (HMM)?

文章目录 隐马尔可夫模型 (HMM)背景公式示例题目详细讲解Python代码求解实际生活中的例子 什么是隐变量背景隐含变量的意义举例说明HMM的三个基本问题示例 隐马尔可夫模型 (HMM) 背景 隐马尔可夫模型(Hidden Markov Model, HMM)是一种统计模型&#xf…

有监督学习——梯度下降

1. 梯度下降 梯度下降(Gradient Descent)是计算机计算能力有限的条件下启用的逐步逼近、迭代求解方法,在理论上不保证下降求得最优解。 e.g. 假设有三维曲面表达函数空间,长(x)、宽(y)轴为子变量,高(z)是因变量&…

大模型企业落地:汽车行业知识大模型应用

前言 在当今这个信息爆炸的时代,知识管理成为了企业提升核心竞争力的关键。特别是在汽车行业这样一个技术密集、信息量庞大的领域,如何高效管理和利用知识资源,成为了每个企业必须面对的挑战。 汽车行业的知识管理痛点 汽车行业作为现代工…

10.错误处理

标题 一、概述二、panic!与不可恢复错误2.1 出错时2.2 示例2.3 panic!的 backtrace 三、Result 与可恢复的错误3.1 引入3.2 错误示例3.3 传播错误1)概念2)传播错误示例3)传播错误的简写:?运算符 一、概述 Rust将错误分…

springboot网上书店管理系统-计算机毕业设计源码03780

摘 要 网上书店管理系统采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员和用户两部分,管理员管理主要功能包括:首页、站点管理(轮播图)用户管理(管理员、注册用户)内容管理&#x…

NXP RT1060学习总结 - fsl_flexcan 基础CAN函数说明 -2

概要 CAN测试源码: https://download.csdn.net/download/qq_35671135/89425377 根据fsl_flexcan.h文件从文件末尾往前面梳理,总共30个基础CAN函数; 该文章只梳理常规CAN,增强型CAN后面再单独梳理。 使用的是RT1064开发板进行测试…

深入理解ReentrantLock

深入理解ReentrantLock 在Java并发编程中,锁(Lock)是控制多个线程对共享资源访问的重要工具。虽然Synchronized关键字是实现锁的常用方式,但它在功能上比较有限。ReentrantLock是java.util.concurrent.locks包中提供的一个更加灵…

FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《02》

系列文章 FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》 说明 上一篇 FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》 主要讲了一下如何快速搭建一个 STM32 裸机工程,其实 STM32CubeMX 可以生成 FreeRTOS 的工程,这就…

python连接mysql数据库、FastAPI、mysql-connector-python

方法工具一、FastAPI 建议使用fast api中的pymysql pip3 install fastapi pip3 install pydantic pip3 install "uvicorn[standard]" pip3 中的3是 Python 3 版本的包管理器命令,用于安装和管理 Python 3 版本的第三方库。在某些系统中,同时…

Linux host映射 设置主机名并通过主机名找到指定系统

一、windows ping linux 1.windows进入到 C:\Windows\System32\drivers\etc\hosts 内,使用edit with notepad打开hosts文件,在下面添加需要寻找的ip以及其主机名。该ip以及主机名即linux的一致。需要查看linux主机名的在终端使用 hostname进行查看&#…

spring boot3登录开发-邮箱登录/注册接口实现

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途 目录 写在前面 上文衔接 内容简介 功能分析 所需依赖 邮箱验证登录/注册实现 1.创建交互对象 2.登录注册业务逻辑实…

JDK17 你的下一个白月光

JDK版本升级的非常快,现在已经到JDK20了。JDK版本虽多,但应用最广泛的还得是JDK8,正所谓“他发任他发,我用Java8”。 但实际情况却不是这样,越来越多的java工程师拥抱 JDK17,于是了解了一下 JDK17新语法&a…

python中的类和对象的基本概念记录

1.python中的类和对象的概念 1.1 类也是对象 在python中的一切皆对象 ,所以python中的类 也是对象。 这与c是不同的,c的类在实例化为对象之前是没有意义的,编译器也不会为其分配内存。 python中的类 即使不实例化为对象,也可以单独使用。类…

Star-CCM+自动网格执行方法与设置技巧

在Star中进行一个仿真项目时,有时会创建多个自动网格。网格创建结束后需要执行。在Star中,网格执行可以分为三种。分别是:单独执行操作;多个执行操作;全部执行操作。接下来将三种执行操作的方法与步骤进行介绍。 其次,如果不习惯用自定义控制网格,有时在一个项目中就会…

大模型+人工智能:重塑地方志管理的新力量

前言 在科技日新月异的今天,人工智能(AI)正以前所未有的速度渗透到各个领域,改变着我们的工作和生活方式。特别是在地方志管理这一领域,大模型和人工智能的结合正在开启一场深刻的变革。今天,就让我们一起…

【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】梯度的反向传播算法

矩阵微积分(Matrix Calculus) 在开始之前,需要先了解矩阵微积分的一些计算规则。 首先,对于矩阵微积分的表示,通常由两种符号约定: 分母布局 标量关于向量的导数为列向量 向量关于标量的导数为行向量 N维…

LDR6500:手机电脑拓展坞转接器方案的卓越之选

随着科技的飞速发展,手机和电脑已成为我们日常生活中不可或缺的工具。然而,它们的接口有限,经常难以满足我们多样化的需求。这时,一款高效、稳定的拓展坞转接器就显得尤为重要。LDR6500,作为乐得瑞科技精心研发的USB P…

【计算机视觉(10)】

基于Python的OpenCV基础入门——图像滤波去噪 图像滤波去噪均值滤波中值滤波高斯滤波双边滤波方框滤波图像滤波去噪代码实现及其效果图 图像滤波去噪 图像滤波去噪是一种图像处理方法,它通过应用滤波器来减少或消除图像中的噪声。噪声是图像中不希望的、无用的、干…

安装sqlserver2022 express

1、下载 SQL Server 下载 | Microsoft 双击sql2022-ssei-expr 2、安装 下载完成以后,将会出现以下对话框 : 点击【全新SQL Server独立安装或向现有安全添加功能】 下一步,下一步: 下一步: 下一步,这里我…