概念

Docker 端口映射即映射容器内应用的服务端口到本机宿主机器。
#实现
当容器中运行一些网络应用,要让外部访问这些应用时,可以通过 -P 或 -p 参数两种方式来指定端口映射。

1.随机映射
使用 -P 参数时,Docker 会随机映射一个端口到内部容器开放的网络端口,如下开启一个 nginx 服务:

$ docker run -d -P nginx
e93349d539119dc48dc841e117f6388d6afa6a6065b75a5b4aedaf5fb2a051fc
$
$ docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS          NAMES
e93349d53911    nginx        "nginx -g 'daemon ..."  11 seconds ago   Up 9 seconds

使用 docker ps 看到,本地主机的 32769 端口被映射到了容器的 80 端口,这时我们通过本机浏览器访问 http://localhost:32769 就会出现 nginx 欢迎页面。

2.指定端口
使用 -p 参数时,可以指定要映射的端口,并且在一个指定的端口上只可以绑定一个容器。支持的格式有:

  • IP:HostPort:ContainerPort
  • IP:ContainerPort
  • HostPort:ContainerPort
    下面开启一个 nginx 服务,将本机 8080 端口映射到容器的 80 端口:
$ docker run -d -p 8080:80 nginx
23e725098712d061a1382f33d6fe54da23ae37597a62f8debdd3731b5f9cc4b9
$
$ docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS          NAMES
23e725098712    nginx        "nginx -g 'daemon ..."  8 seconds ago    Up 6 seconds

使用 docker ps 看到,本地主机的 8080 端口被映射到了容器的 80 端口,这时我们通过本机浏览器访问 http://localhost:8080 就会出现 nginx 欢迎页面。

3.查看端口映射
使用 docker port 命令来查看当前映射的端口配置,也可以查看到绑定的地址。命令格式如下:

$ docker port CONTAINER [PRIVATE_PORT[/PROTO]]

容器有自己的内部网络和 IP 地址,可以使用 docker inspect + 容器ID 获取容器的具体信息。

DOCKER 给运行中的容器添加映射端口

方法一(貌似不太行,只做了DNAT,)

  1. 获取容器IP
    将container_name 换成实际环境中的容器名
docker inspect `container_name` | grep IPAddress
  1. iptable转发端口
    将容器的8000端口映射到docker主机的8001端口
iptables -t nat -A  DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000

方法二

  1. 提交一个运行中的容器为镜像
docker commit containerid foo/live
  1. 运行镜像并添加端口
docker run -d -p 8000:80 foo/live /bin/bash

参考:docker 给运行中的容器设置端口映射

Docker容器设置端口映射的方法相关推荐

  1. Docker容器修改端口映射

    Docker容器修改端口映射 https://zhuanlan.zhihu.com/p/94949253 对于已经建立的docker容器,需要新增容器对主机的端口映射,主要分为三种: 一:通过修改配置 ...

  2. 解决docker容器开启端口映射后,会自动在防火墙上打开端口的问题

    解决docker容器开启端口映射后,会自动在防火墙上打开端口的问题 参考文章: (1)解决docker容器开启端口映射后,会自动在防火墙上打开端口的问题 (2)https://www.cnblogs. ...

  3. 解决windows系统无法对docker容器进行端口映射的问题

    解决windows系统无法对docker容器进行端口映射的问题 参考文章: (1)解决windows系统无法对docker容器进行端口映射的问题 (2)https://www.cnblogs.com/ ...

  4. 解决Windows下无法对docker容器进行端口映射的问题

    解决Windows下无法对docker容器进行端口映射的问题 在安装了一个Windows下安装了docker,并尝试在其中运行Nginx服务,但映射完毕之后,在主机的浏览器中,打开localhost: ...

  5. docker容器增加端口映射最佳实践(修改配置文件方式)

    前言: 在日常的docker运维中,经常遇到这样一个问题:已经配置好且运行的docker容器要根据业务需要增加端口映射到宿主机,如何简单有效的解决呢? 下面以mysql容器为例,详细说明操作步骤. 一 ...

  6. docker(8):docker容器的端口映射

    docker(8):docker容器的端口映射 cker的端口映射,能保证在外部网络 访问 同一设备上不同容器时候 不会因为端口问题产生冲突. docker 可将容器对外提供服务的端口映射到 host ...

  7. win10 docker 容器修改端口映射

    通常容器生成后是无法通过docker界面或docker命令去修改端口映射的,以下是通过修改配置文件的方式实现: 第一步:在powershell执行以下命令找到容器hash值 docker inspec ...

  8. docker 改host_所以到底该如何修改 docker 容器的端口映射!!!

    |问题背景 docker run -d -p 9999:8080 -i --name tomcat7 tomcat:7创建容器时,指定了端口映射(-p) 如果容器运行之后发现端口需要改怎么办? 当前是 ...

  9. docker 镜像修改的配置文件自动还原_所以到底该如何修改 docker 容器的端口映射!!!...

    |问题背景 docker 创建容器时,指定了端口映射(-p) 如果容器运行之后发现端口需要改怎么办? 当前是访问 9999 端口 |删除原有容器,重新创建新的容器 |删除容器 docker |重新创建 ...

最新文章

  1. 当postgres的主键序列不同步时,如何重置?
  2. jedisPool.getResource()方法长时间无响应并且不报错
  3. vim 删除多行_Vim神器的五个高效插件,新老司机别错过!
  4. 李洪强iOS开发Swift篇—02_变量和常量
  5. 如何简单快速的修改Bootstrap
  6. 在freemarker文件中,html标签获取后台的值
  7. Asp.Net MVC4入门指南(8):给数据模型添加校验器
  8. 浅谈Java垃圾回收
  9. 【Linux的开胃小菜】基于Ubuntu搭建内网DNS服务器
  10. 1068 万绿丛中一点红 Python实现
  11. 冯诺依曼计算机的英文简称,冯诺依曼计算机,von neumann machine,音标,读音,翻译,英文例句,英语词典...
  12. uniapp使用艺术字
  13. 【unity 3d】--- 瞄准镜效果
  14. [HTML5点滴]客户端存储那些事
  15. Linux内核配置选项详解
  16. Hive sql 常用命令2
  17. R语言作图好看的秘籍:RColorBrewer调色板详解
  18. GB/T35590-2017移动电源CMA检测报告,移动电源新国标检测
  19. Java物联网项目中,运行SPringBoot脚手架,运行失败问题
  20. 7-3 最长公共前后缀

热门文章

  1. 佛家养生100条(经典) - 1
  2. WIN32_LEAN_AND_MEAN
  3. css3绘制环形_css画圆,如何用纯css实现一个动态画圆环效
  4. yolov5——train.py代码【注释、详解、使用教程】
  5. 栈应用之进制转换(C语言)
  6. mysql服务哪里启动_mysql服务怎么启动和关闭?
  7. 欲穷千里目,踏上云平台,更上一层楼
  8. 吉布斯现象的matlab实现,吉布斯现象matlab实现和傅里叶级数
  9. 字符串强制转化数字java_js 字符串转换成数字的三种方法
  10. Android 适配18:9 和 16:9 屏幕尺寸比例的问题