zoukankan      html  css  js  c++  java
  • docker动态修改端口映射(考虑生产环境)

    今天需要修改一个容器A的外部映射的端口,在宿主机上跑着许多容器,所以在解决这个问题的时候需要考虑两个硬性条件:

    1、宿主机上docker的service服务本身不能重启,影响其他线上容器。

    2、该容器A不能删除,因为有数据存在。

    网上有不少的解决方案,但是在这种场景下适合的特别少,常用的有下面两种(不过对于我这次的场景来讲,只能使用方案二解决):

    方案一:修改容器A配置文件,重启容器A

          我们知道宿主机上默认存放所有容器的配置目录是在/var/lib/docker/containers/目录下,在该目录下有许多个容器ID的目录,每一个ID表示一个容器。因此要找到容器A的配置文件那么需要先查询出容器A的ID号即可。使用“docker ps | grep Container_Name”。得到容器A的ID号之后再去/var/lib/docker/containers/目录下使用tab键补全目录并进入即可,然后就可以看到容器A的配置文件。如下所示:

    容器A的主要的配置文件是hostconfig.json这个文件,我们打开并编辑内容即可。里面的信息较多,我们只需要找到PortBindings这一行的信息,需要编辑:

    "PortBindings":{"9200/tcp":[{"HostIp":"","HostPort":"9201"}],"9300/tcp":[{"HostIp":"","HostPort":"9301"}]}

    文档中PortBings这一项中,其中“9200/tcp”是对应容器内部的9200端口。而“HostPort”:"9201"则对应的是映射到宿主机的端口9201。后面的9300端口也是统一如此。修改完端口之后,重启docker服务service即可。

    缺点:此方法需要重启容器服务,因此会影响其他的docker容器,因此不建议使用。

    方案二:使用docker commit新构镜像

    docker commit把一个容器的文件改动和配置信息commit到一个新的镜像中,然后用这个新的镜像重启一个容器,这对之前的容器不会有影响。

    主要是三步骤:

    1、先stop容器A

    2、commit容器A

      docker commit old_container  new_image:tag

    3、使用前一步新生成的镜像重新启动一个容器。

      docker run --name container_name02 -p 9202:9200 new_image:tag

    优点:可以解决问题,比较推荐 

  • 相关阅读:
    (android高仿系列)今日头条 --新闻阅读器 (三) 完结 、总结 篇
    今日头条 --新闻阅读器
    免费新闻娱乐接口文档
    [代码片段] Android百度地图定位收索取周边在列表中展示并选择
    引用其它布局
    关于推广个人博客的经验_博客推广
    博客推广方法技巧
    android项目解刨之时间轴
    Android小项目:计算器
    Android项目技术总结:网络连接总结
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/11113407.html
Copyright © 2011-2022 走看看