对已有的docker容器增加新的端口映射问题(两种方式)

一般在运行容器时,我们都会通过参数 -p(使用大写的-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如

docker run -it -d --name [container-name] -p 8088:80 [image-name]

这里是将容器内的80端口到宿主机的8088端口

在运行容器时指定映射端口运行后,如果想要添加新的端口映射,可以使用以下两种方式:

方式一:将现有的容器打包成镜像,然后在使用新的镜像运行容器时重新指定要映射的端口

#1、停止现有容器
docker stop container-name
#2、将容器commit成为一个镜像
docker commit -a "作者" -m "a new image" [容器名称或id] [打包的镜像名称]:[版本标签]
#常用OPTIONS说明:
#    -a :提交的镜像作者
#    -c :使用Dockerfile指令来创建镜像
#    -m :提交时的说明文字
#    -p :在commit时,将容器暂停

#或者使用export和import将容器导出为镜像
docker export 容器ID > 压缩包名称.tar
cat 压缩包名称.tar | docker import - 镜像名称:版本标签
#例如:
#导出
$ docker export 1e560fca3906 > ubuntu.tar
#导入
$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1
#另外,也可以通过指定 URL 或者某个目录来导入,例如:
$ docker import http://example.com/exampleimage.tgz example/imagerepo:v1

#3、用新的镜像生成一个新的容器并配置需要的映射端口
docker run -it -d --name container-name -p p1:p1 -p p2:p2 new-image-name

方式二:修改要端口映射的容器的配置文件

#1、查看容器的信息
docker ps -a

#2、查看容器的端口映射情况,在容器外执行:
docker port 容器ID 或者 docker port 容器名称

#3、查找要修改容器的全ID
docker inspect 容器ID |grep Id

#4、进到/var/lib/docker/containers 目录下找到与全 Id 相同的目录,修改 其中的hostconfig.json 和 config.v2.json文件:
#注意:若该容器还在运行中,需要先停掉
docker stop 容器ID
#再停掉docker服务
systemctl stop docker

#5、修改hostconfig.json如下,添加端口绑定"9003/tcp": [{"HostIp": "","HostPort": "9003"}],表示绑定端口9003

#6、修改config.v2.json在ExposedPorts中加上要暴露的端口,即9003

最后改完之后,重启docker服务

systemctl restart docker

此时,可以查看宿主机端口是否和容器内端口映射成功,在容器外执行

netstat -an |grep 宿主机的映射端口

到此这篇关于对已有的docker容器增加新的端口映射的文章就介绍到这了,更多相关docker容器增加新的端口映射内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Docker容器端口映射后突然无法连接的排查过程

    一.背景 一般需要对外提供服务的Docker容器,我们在启动时后使用-p命令将对外访问端口暴露给外部,例如启动Docker Registry,我们将5000端口映射出来供外部访问: docker run -d -p 5000:5000 registry 但最近碰到一个非常奇怪的情况:研发组里一个CentOS 7测试环境里部署有Docker Registry,并对外暴露了端口.启动容器后一段时间内都是可以正常工作的,但在不定时间间隔后,外部主机就会出现无法从仓库中拉取镜像的情况,提示TimeOut

  • Docker 动态修改容器端口映射的方法

    前言:Docker端口映射往往是Docker Run命令时通过-p将容器内部端口映射到宿主机的指定端口上,一般来说容器的端口所对应的端口是提前确定需要映射的.但是有些情况下不得不需要临时映射端口,例如Docker中运行着MySQL容器,默认端口是不开放的.那么有什么办法可以让运行中的容器暴露指定的端口呢?客官请往下看---> 方法一:更改Docker配置文件(有风险) 通过修改Docker的配置文件来达到我们的目的,一般来说需要修改以下的文件config.v2.json和hostconfig.j

  • 运行中的docker容器端口映射如何修改详解

    前言 在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设置,让你修改指定端口映射规则.那么这种情况我们该怎么处理呢?今天Docker君教你如何修改运行中的docker容器的端口映射? 方法一:删除原有容器,重新建新容器 这个解决方案最为简单,把原来的容器删掉,重新建一个.当然这次不要忘记加上端口映射. 优缺点:优点是简单快捷,在测试环境使用较多.缺

  • 详解Docker 端口映射与容器互联

    1.端口映射实现访问容器 1.从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的. 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p或-P参数来指定端口映射.当使用-P(大写P)标记时,Docker会随机映射一个端口到内部容器开放的网络端口(端口范围在Linux系统使用的端口之外,一般都过万): [root@docker ~]# docker run -d --name nginx_1 -P nginx:latest

  • docker容器启动后添加端口映射

    概要 网上有许多人在查找关于容器启动后能否进行端口映射的问题.我曾经也问过度娘,很遗憾我没找到.本文就这个问题给出一个解决方法,旨在抛砖引玉.本文的思路是使用iptables的端口转发,这也是docker端口映射内部的实现机制,只不过我是显示地写出来罢了,为的就是让查找这个问题的人对docker的端口映射有一个直观的了解. 结论:容器启动后是可以添加端口映射的,但不建议手工添加,最好使用docker提供的功能. 步骤 创建两个容器并进行了端口映射,结果如图所示: 假如,我start一个容器,其内

  • 对已有的docker容器增加新的端口映射问题(两种方式)

    一般在运行容器时,我们都会通过参数 -p(使用大写的-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如 docker run -it -d --name [container-name] -p 8088:80 [image-name] 这里是将容器内的80端口到宿主机的8088端口 在运行容器时指定映射端口运行后,如果想要添加新的端口映射,可以使用以下两种方式: 方式一:将现有的容器打包成镜像,然后在使用新的镜像运行容器时重新指定要映射的端口 #1.停止现有容器 d

  • docker已启动容器修改添加端口映射的两种方法

    目录 简述 一.先提交,在配置 1.先将容器提交为镜像 2.创建新的容器并运行 二. 修改配置文件 1.关闭docker服务 2.修改hostconfig.json 3.修改config.v2.json 4.重启 docker服务 5.查看配置项已经修改成功 补充:docker容器怎么开端口 总结 简述 正常情况下,在你创建容器时可以添加多个端口映射,写法如下 每个端口映射都加一个-p docker run -itd --name centos -p 4000:8081 -p 3306:3306

  • Docker中数据卷(volume)管理的两种方式

    上篇文章给大家介绍过 docker基础知识之挂载本地目录的方法 ,今天给大家介绍Docker中数据卷(volume)管理的两种方式,具体内容如下所示: 什么是数据卷 数据卷( volume ):volume是存在于一个或多个容器中的特定文件或文件夹,这个目录以独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久化提供便利. 为什么要用数据卷 Docker分层文件系统存在的问题: Docker的镜像是由一系列的只读层组合而来的,当启动一个容器时, Docker加载镜像的所有只读层,并在最上

  • 修改已有docker容器中的内容方法

    一.docker ps    列出容器 二.docker cp   拷贝文件至容器 注:docker中宿主机与容器(container)互相拷贝传递文件的方法 1.从容器拷贝文件到宿主机 docker cp mycontainer:/opt/testnew/file.txt /opt/test/ 2.从宿主机拷贝文件到容器 docker cp /opt/test/file.txt mycontainer:/opt/testnew/ 需要注意的是,不管容器有没有启动,拷贝命令都会生效. 当结束后,

  • Docker构建镜像的两种方式实现

    目录 从已有镜像更新镜像: 从零开始构建镜像: 从 docker 镜像仓库中下载的镜像不能满足我们的需求时,可以通过以下两种方式对镜像进行更改. 从已有镜像更新镜像 从零开始构建镜像 从已有镜像更新镜像: 更新镜像之前,我们需要使用镜像来创建一个容器. 进入容器: docker run -t -i db2b37ec6181 /bin/bash 在运行的容器内使用 apt-get update 命令进行更新.在完成操作之后,输入 exit 命令来退出这个容器. 此时 ID 为 0aab061e6f

  • docker 文件存放路径, 修改端口映射操作方式

    如何获取容器的启动命令 容器早已创建好,如何得知它的启动参数(数据挂载到哪) #假设通过如下命令启动了一个容器 docker run -d --name mysql_cdh \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v mysql-data:/var/lib/mysql \ --restart=always \ mysql:5.5 --character-set-server=utf8 #如何通过容器名得知启动参数 [root@jenki

  • Docker部署Nginx并修改配置文件的两种方式

    目录 一.创建容器 二.修改配置文件 1. 进入容器内部修改配置文件 2.容器加载外部配置文件 总结 一.创建容器 # 搜索Nginx镜像 docker search nginx # 拉取Nginx镜像 docker pull nginx # 查看镜像名为nginx的镜像 docker images nginx # 运行镜像,生成容器 # 命令解读: # -d:以后台守护线程运行 # --name:容器命名 # -p 80:80 : 映射端口,容器内部80端口映射到服务器80端口 # nginx

  • 通过两种方式增加从库——不停止mysql服务

    一般在线增加从库有两种方式,一种是通过mysqldump备份主库,恢复到从库,mysqldump是逻辑备份,数据量大时,备份速度会很慢,锁表的时间也会很长.另一种是通过xtrabackup工具备份主库,恢复到从库,xtrabackup是物理备份,备份速度快,不锁表.为什么不锁表?因为自身会监控主库日志,如果有更新的数据,就会先写到一个文件中,然后再回归到备份文件中,从而保持数据一致性. 现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库.前提是不能影响线上业务使用,

  • 两种方式创建docker镜像的启动容器时区别介绍(总结篇)

    Docker是建立在Linux内核基础上的,在目前的主流Linux系统中,都已经原生支持了Docker且使用体验也最好,当然,在Windows平台和MacOS系统中也支持Docker,只是需要使用类似Boot2Docker等虚拟化工具来提供Linux支持. 下面重点给大家介绍基于两种创建docker镜像的启动容器时区别,感兴趣的朋友可以跟着小编一起学习! 1.凡是用docker commit生成的镜像启动的时候可以加载一个启动自己应用的脚本,例如: docker run -d -P tomcat

随机推荐