修改docker容器端口映射到主机的方法

这篇具有很好参考价值的文章主要介绍了修改docker容器端口映射到主机的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

修改docker容器端口映射的方法

如何修改已经创建好的容器的映射端口
我们都知道docker在创建时可以指定端口映射,但是容器一旦创建好,就没有命令支持直接修改映射端口。如果我们已经对容器里面的内容已经做了一定更改,不能删除进行重建,怎么办呢?通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射。

有没有办法不保存镜像而直接修改已有的这个容器呢?有。可参考如下
https://stackoverflow.com/questions/19335444/how-do-i-assign-a-port-mapping-to-an-existing-docker-container

测试:以之前创建的nginx容器为例

方法一:

1) 停止容器

2) 停止docker服务(systemctl stop docker.socket)。可以跳过上一步

3) 修改这个容器的hostconfig.json文件中的端口(如果config.v2.json里面也记录了端口,也要修改,但是貌似停止容器后,这个文件里面就没有相应配置了,可能跟版本有关系),注意是修改hostport后面的端口

4) 启动docker服务(systemctl start docker)

5) 启动nginx容器
亲测有效

[root@k8s-m1 ~]# docker ps -a|grep nginx
10016be35a75   nginx                                               "/docker-entrypoint.…"   11 hours ago    Up 11 hours               0.0.0.0:80->80/tcp                  nginx-journald
#需要停止docker服务,只停容器不行
[root@k8s-m1 10016be35a75db625bac1a2eb8a8ac618f0ba8c7fbbf53812e52e9e0e620f45e]# systemctl stop docker
[root@k8s-m1 ~]# cd /var/lib/docker/containers/10016be35a75db625bac1a2eb8a8ac618f0ba8c7fbbf53812e52e9e0e620f45e/
[root@k8s-m1 10016be35a75db625bac1a2eb8a8ac618f0ba8c7fbbf53812e52e9e0e620f45e]# vim hostconfig.json 
[root@k8s-m1 10016be35a75db625bac1a2eb8a8ac618f0ba8c7fbbf53812e52e9e0e620f45e]# vim config.v2.json 

[root@k8s-m1 10016be35a75db625bac1a2eb8a8ac618f0ba8c7fbbf53812e52e9e0e620f45e]# systemctl start docker
[root@k8s-m1 10016be35a75db625bac1a2eb8a8ac618f0ba8c7fbbf53812e52e9e0e620f45e]# docker start 100
[root@k8s-m1 10016be35a75db625bac1a2eb8a8ac618f0ba8c7fbbf53812e52e9e0e620f45e]# docker ps -a|grep nginx
10016be35a75   nginx                                               "/docker-entrypoint.…"   11 hours ago         Up 17 seconds                     0.0.0.0:8088->80/tcp     nginx-journald

根据结果发现映射端口已经从原来的80变成了8088。

方法二:
1)获得容器nginx-journald的IP,下面两种方法都可以
将container_name 换成实际环境中的容器名

[root@k8s-m1 ~]#  docker inspect --format='{{.Name}}-{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nginx-journald
/nginx-journald-172.16.0.3
[root@k8s-m1 ~]#docker inspect nginx-journald | grep IPAddress
[root@k8s-m1 ~]# docker inspect nginx-journald | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.16.0.3",
                    "IPAddress": "172.16.0.3",

2)iptable转发端口
将宿主机的81端口映射到容器的80端口

#下面的iptables意思就是目的地址为81端口的流量转发到172.16.0.3:80
[root@k8s-m1 ~]# iptables -t nat -A DOCKER -p tcp --dport 81 -j DNAT --to-destination 172.16.0.3:80

区别:第二种方法相当于是通过iptables转发增加了一个映射端口,原来的映射端口其实也还在,也还能够进行访问。而第一种只有一个端口能进行访问。
如需学习更多关于docker或者运维的知识,欢迎前往博客主页。文章来源地址https://www.toymoban.com/news/detail-619674.html

到了这里,关于修改docker容器端口映射到主机的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker中对已存在运行的容器修改端口映射和容器卷映射

    一、初次创建容器,指定宿主机和容器端口的映射,如下示例: 二、对已存在运行容器,更改端口 方式一:(删了原来的,根据image重做) 1、停止容器 2、将容器打包成镜像 3、用“一”中的命令,通过新镜像开启新容器 方式二:(直接修改现有容器) 1、停止容器 2、查找

    2024年02月16日
    浏览(35)
  • 修改运行中的docker容器的端口映射(简单、高效)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在docker run创建并运行容器的时候,可以通过-p指定端口映射规则。但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改。当docker start运行容器后并没有提供一个-p选项或设置,让你修改

    2024年02月08日
    浏览(24)
  • Docker 容器添加新端口映射的方法与步骤

    在Docker容器已经创建后,需要添加新的端口映射,即对已经存在的Docker容器添加新的端口映射,可以通过以下步骤来添加,即通过修改配置文件的方法。 1、先找到要修改的容器hash值: docker inspect 容器名称 2、然后退出docker Desktop服务(因为在线状态配置文件修改保存不了)

    2024年02月11日
    浏览(28)
  • docker容器添加对外映射端口

    在容器首次启动是,可通过-p参数(-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如: 上述命令将容器内的80端口映射到宿主机的8088端口。 参数说明 -d 表示后台运行容器 -t 为docker分配一个伪终端并绑定到容器的标准输入上 -i 是让容器

    2024年02月09日
    浏览(26)
  • docker 容器如何查看正在运行容器的端口映射

    1、查看docker容器的版本 2、查看正在运行的容器 3、查看容器的端口映射 总结:到此就完成了查看正在运行容器的端口映射.

    2024年02月12日
    浏览(36)
  • Docker给容器添加新端口映射

    Docker容器创建后,其网络配置通常是固定的,包括端口映射。基于Docker的原生工具,一旦容器启动,就无法直接修改其端口映射。然而,有几种方法可以解决需要对现有容器添加新端口映射的问题。 最直接的方法是创建一个新的容器,并在创建时指定所有需要的端口映射。这

    2024年03月28日
    浏览(36)
  • docker 容器与主机端口 在容器中启动服务 多容器端口冲突问题

    容器内的端口等与主机的端口等是分离的,容器中的环境可理解为是虚拟的. 容器中使用的网络环境与主机保持一致: 示例: docker run -it --network host image:tag 其中: --network host表示容器中使用的端口 IP等都是主机上的。 容器中端口可以映射到主机端口,且多个不同的主机端口

    2024年02月16日
    浏览(30)
  • docker为已启动的容器添加端口映射

    针对已运行的容器添加端口映射 1、查看容器是否映射端口 有端口映射: 无端口映射: 2、查看容器完整Id 3、进入docker容器目录查看 4、根据得到的容器完整id进入目录 目录中分别有两个文件: hostconfig.json 和 config.v2.json ,直接查看文件内容比较混乱可以下载到本机,使用

    2024年02月16日
    浏览(33)
  • Docker介绍下载安装、制作镜像及容器、做目录映射、做端口映射

    在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是

    2023年04月12日
    浏览(35)
  • 【云原生】Docker的端口映射、数据卷、数据卷容器、容器互联

    目录 一、端口映射(相当于添加iptables的DANT) 二、数据卷创建(宿主机目录或文件挂载到容器中) 三、数据卷容器(多个容器通过同一个数据卷容器为基点,实现所有容器数据共享) 四、容器互联(可以通过容器名称或连接别名通信) 在启动容器的时候,如果不指定对应

    2024年01月25日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包