0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

居然能修改已运行的Docker容器端口映射?

dyquk4xk2p3d 来源:良许Linux 2023-03-20 09:25 次阅读

		

		

容器未启动?

如果你的容器还没有构建时,想添加端口映射时,你只需要在创建容器的时候添加 -p 参数,想添加几个端口映射就追加几个 -p 参数。类似于如下示例:

dockerrun--nameapi_dfo_hyperf_ws
-v/Users/pudongping/glory/codes/dfo/api_dfo_hyperf:/api_dfo_hyperf
-p9502:9502
-p9503:9503
-p9504:9504
-p9505:9505-it
--entrypoint/bin/sh
alex/alex_api_dfo:v1.0

容器已启动?

但是想修改或者添加端口时,先停止掉正在运行的容器。

以下内容都是以容器 id 为 cbe26510c276 进行操作的,请务必将容器 id 换成你自己需要修改的容器 id。

dockerstop{容器的名称或者id}

比如:

dockerstopcbe26510c276

查看容器完整的 hash_of_the_container 数值:

dockerinspect{容器的名称或者id}|grepId

#比如:
dockerinspectcbe26510c276|grepId
#会得到如下结果:
#"Id":"cbe26510c276fa9a4487a8c2af8cbb49410f2a5305149d2b26eb8ce37c777d00"

打开 hostconfig.json 配置文件

vim/var/lib/docker/containers/{hash_of_the_container}/hostconfig.json

比如:

vim/var/lib/docker/containers/cbe26510c276fa9a4487a8c2af8cbb49410f2a5305149d2b26eb8ce37c777d00/hostconfig.json

如果你不想先查看完整的容器 hash_of_the_container 数值,你也可以直接先切换到当前容器相关目录中 cd /var/lib/docker/containers/{hash_of_the_container}* , 然后再去编辑 hostconfig.json 配置文件。

cd/var/lib/docker/containers/{hash_of_the_container}*

比如

cd/var/lib/docker/containers/cbe26510c276*

然后再去编辑 hostconfig.json 配置文件:

vimhostconfig.json

修改 hostconfig.json 配置文件

在 hostconfig.json 配置文件中,找到 "PortBindings":{} 这个配置项,然后进行修改。我这里添加了两个端口映射,分别将宿主机的 8502 端口以及 8505 端口映射到容器的 8502 端口和 8505 端口。

HostPort 对应的端口代表 宿主机 的端口。

建议容器使用什么端口,宿主机就映射什么端口,方便以后管理。当然,具体情况,具体分析。

{
"PortBindings":{
"8502/tcp":[
{
"HostIp":"",
"HostPort":"8502"
}
],
"8505/tcp":[
{
"HostIp":"",
"HostPort":"8505"
}
]
}
}

如果 config.v2.json 配置文件或者 config.json 配置文件中也记录了端口,也需要进行修改,如果没有,就不需要改。

只需要修改 "ExposedPorts": {} 相关之处。

{
"Args":[],
"Config":{
"ExposedPorts":{
"8502/tcp":{},
"8505/tcp":{}
},
"Entrypoint":[
"/bin/sh"
]
}
}

最后重启 docker,然后查看容器相关配置信息是否已经修改完毕

#重启docker
servicedockerrestart
#或者
systemctlrestartdocker

查看容器相关配置信息:

dockerinspect{容器的名称或者id}
#比如:
dockerinspectcbe26510c276

配置符合你的要求后,再次启动容器:

dockerstart{容器的名称或者id}
#比如:
dockerstartcbe26510c276

Docker Desktop for Mac

How to login the VM of Docker Desktop for Mac

因为在 Docker for MacOS 中,容器的宿主机并不是 MacOS 本身,而是在 MacOS 中运行的一个 VM 虚拟机 。虚拟机的路径可以通过查看 Docker Desktop 的配置界面 Disk image location 配置获得。

那么我们如何进入这个虚拟机呢?

最简单的方式是采用 justincormack/nsenter1 进入,这个镜像只有 101KB,已经非常小了。

dockerrun-it--rm--privileged--pid=hostjustincormack/nsenter1
  • –rm 表示在退出的时候就自动删除该容器;
  • –privileged 表示允许该容器访问宿主机(也就是我们想要登录的 VM )中的各种设备;
  • –pid=host 表示允许容器共享宿主机的进程命名空间(namespace),或者通俗点儿解释就是允许容器看到宿主机中的各种进程;

然后再进入 /var/lib/docker/containers 目录修改 config.v2.json 配置文件和 hostconfig.json 配置文件即可。整体来说,在 MacOS 上除了进入 /var/lib/docker/containers 目录时,进入方式有所不同以外,修改配置文件方式和上文一样。需要注意的是,修改的时候请使用 vi 编辑器,因为这个镜像没有安装 vim 编辑器的。

比如:

vi/var/lib/docker/containers/a7377587b9f08cfe87af9a8ffa4da0f90bf07fb0a1cd6833a5ffcd9c37b842d0/config.v2.json

vi/var/lib/docker/containers/a7377587b9f08cfe87af9a8ffa4da0f90bf07fb0a1cd6833a5ffcd9c37b842d0/ho

审核编辑 :李倩



声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 端口
    +关注

    关注

    4

    文章

    861

    浏览量

    31740
  • 容器
    +关注

    关注

    0

    文章

    483

    浏览量

    21929
  • Docker
    +关注

    关注

    0

    文章

    443

    浏览量

    11672

原文标题:骚操作!居然能修改已运行的 Docker 容器端口映射?

文章出处:【微信号:良许Linux,微信公众号:良许Linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [分享]免费小软件——天锐端口映射器V1.0

    软件名称:天锐端口映射器软件版本:V1.0软件大小:72kB下载:天锐端口映射器.rar 软件介绍:本软件是绿色软件,实现TCP/IP端口重定向。通过在服务器安装运行此程序,可以把内网
    发表于 08-12 17:06

    TCP通信利用花生壳软件将内网端口映射到外网

    里用修改路由器参数实现过。无奈现在在公司进不去路由器啊。突然发现花生壳里有个端口映射功能,还比较好用。现在分享给大家,希望对需要进行远程访问做测试的同学提供一点帮助。友情提示:要花一块钱。小菜鸟一只
    发表于 07-27 19:26

    Linux如何配置本地端口映射

    在linux服务器上,1024以下的端口是禁止非root用户使用的。所以如果想要使用80端口访问tomcat,则修改conf/server.xml的端口为80,那么只能使用root用户
    发表于 07-22 07:14

    Docker端口映射和nginx安装流程

    Docker端口映射和nginx安装
    发表于 04-14 11:44

    Docker端口映射和nginx安装

    Docker端口映射和nginx安装
    发表于 04-17 11:44

    路由器端口映射的原理及设置

    路由器端口映射的原理及设置 端口映射其实就是我们常说的?NAT地址转换的一种,其功能就是把在公网的地址转翻译成私有地址,?采
    发表于 01-27 10:05 705次阅读

    使用IdMappedPortTCP进行端口映射_Delphi教程

    Delphi教程使用IdMappedPortTCP进行端口映射,很好的Delphi学习资料。
    发表于 03-16 15:00 40次下载

    关于自动端口映射功能实现步骤和调试

    接下来,小编就为大家讲解如何使用UPnP协议实现网络设备自动配置路由器进行端口映射
    发表于 09-23 10:00 4次下载
    关于自动<b class='flag-5'>端口映射</b>功能实现步骤和调试

    端口映射端口转发的区别?

    端口转发,有时被叫做隧道,是安全壳为网络安全通信使用的一种方法。端口转发是转发一个网络端口从一个网络节点到另一个网络节点的行为端口映射是NAT的一种,功能是把在公网的地址转翻译成私有地
    发表于 12-04 17:31 3.7w次阅读
    <b class='flag-5'>端口映射</b>和<b class='flag-5'>端口</b>转发的区别?

    Linux或Windows上实现端口映射

    Linux或Windows上实现端口映射
    的头像 发表于 04-07 10:19 675次阅读

    如何通过路由器设置端口映射

    不少朋友问到什么是端口端射?在项目中我们经常会遇到,这个功能也是非常实用的,可以解决一些远程控制访问,很多朋友对这个设置一直都了解不多。那么如何设置端口映射呢?一起来看下。
    的头像 发表于 06-16 12:54 1.1w次阅读
    如何通过路由器设置<b class='flag-5'>端口映射</b>

    端口转发和端口映射的区别 端口映射端口转发的各自意义?

    端口转发和端口映射的区别 端口映射端口转发的各自意义? 端口转发和端口映射是两种网络技术,它们
    的头像 发表于 11-22 17:41 4475次阅读

    docker进入容器的方法有哪些

    基础命令、Docker客户端、Docker Compose等工具的使用,让你轻松掌握进入容器的技巧。 一、基础命令进入容器 docker e
    的头像 发表于 11-23 09:45 5770次阅读

    路由器映射是什么意思?路由器端口映射怎么设置?

    有一个Web服务器在您的家庭网络中运行,您可以使用路由器映射将其公开到互联网上。这样,任何人都可以从互联网上访问该Web服务器。 路由器端口映射的好处有: 1. 隐藏原地址端口。或者说
    的头像 发表于 05-10 13:42 396次阅读

    容器怎么完成和容器引擎的映射

    容器与注入机的映射通常涉及网络端口、文件系统和环境变量等方面的配置。以下是如何在不同方面完成容器和注入机映射的详细说明: 1. 网络
    的头像 发表于 06-06 15:18 125次阅读