端口映射

映射容器内应用的服务端口到本地宿主主机

1. 从外部访问容器应用

在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。当容器中运行一些网络应用,要让外部访问这些应用时,可以通过 -P 或 -p 参数来指定端口映射。当使用 -P (大写的)标记时,Docker 会随机映射一个端口到内部容器开放的网络端口:

wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$ docker run -d -P training/webapp python app.py
Unable to find image 'training/webapp:latest' locally
latest: Pulling from training/webapp
e190868d63f8: Pull complete
909cd34c6fd7: Pull complete
0b9bfabab7c1: Pull complete
a3ed95caeb02: Pull complete
10bbbc0fc0ff: Pull complete
fca59b508e9f: Pull complete
e7ae2541b15b: Pull complete
9dd97ef58ce9: Pull complete
a4c1b0cb7af7: Pull complete
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Downloaded newer image for training/webapp:latest
4233fd67e97c62a073353315bf236ab081ae4ec501ae91ef1a62a4782004c5cb
wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$ docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
4233fd67e97c        training/webapp     "python app.py"     12 seconds ago      Up 11 seconds       0.0.0.0:32768->5000/tcp   reverent_blackburn
wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$
  • -d 启动一个daemon并在后台运行
  • -P 映射一个网络端口
  • training/webapp docker 社区提供的,预先创建好的模板,里面包含一个简单的 Python Flask web应用

可以使用 docker ps 看到,本地主机的 32768 被映射到了容器的 5000 端口。访问宿主主机的 32768 端口即可访问容器内Web应用提供的界面。同样,可以通过docker logs命令来查看应用的信息:

wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$ docker logs -f reverent_blackburn * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

-p (小写的)可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有

  1. IP:HostPort: ContainerPort
  2. IP::ContainerPort
  3. HostPort:ContainerPort

2. 映射所有接口地址

使用 HostPort:ContainerPort 格式将本地的 5000 端口映射到容器的 5000 端口,可以执行:

docker run -d -p 5000:5000 training/webapp python app.py

此时默认会绑定本地所有接口上的所有地址。多次使用 -p 标记可以绑定多个端口。例如:

docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py

3. 映射到指定地址的指定端口

可以使用 IP:HostPort:ContainerPort 格式指定映射使用一个特定地址,比如 localhost 地址 127.0.0.1:

docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

4. 映射到指定地址的任意端口

使用 IP::ContainerPort 绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口:

docker run -d -p 127.0.0.1::5000 training/webapp python app.py

还可以使用 udp 标记来指定 udp 端口:

docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

5. 查看映射端口配置

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

wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$ docker port reverent_blackburn 5000
0.0.0.0:32768
wohu@iZm5egn5zptnov4j3oxh4fZ:~/docker$

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

Docker 入门系列(5)- Docker 端口映射(映射所有IP地址、映射到指定地址和指定端口、映射指定地址任意端口、查看映射端口配置)相关推荐

  1. Docker入门系列(一):目标和安排

    Docker入门系列(一) 这个系列的教程来源于docker的官方文档,此文档的目的在于一步一步学习docker的使用方法. 这一系列的教程有如下几篇文档: docker安装启动 构建第一个docke ...

  2. Docker入门系列之二:使用dockerfile制作包含指定web应用的镜像

    2019独角兽企业重金招聘Python工程师标准>>> 在前一篇文章:Docker入门系列之一:在一个Docker容器里运行指定的web应用 里, 我们已经成功地将我们在本地开发的一 ...

  3. Docker入门系列之三:如何将dockerfile制作好的镜像发布到Docker hub上

    这个系列的前两篇文章,我们已经把我们的应用成功地在Docker里通过nginx运行了起来,并且用dockerfile里制作好了一个镜像. Docker入门系列之一:在一个Docker容器里运行指定的w ...

  4. Docker 入门系列(7)- Dockerfile 使用(FROM、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、WORKDIR)

    Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 来快速创建自定义的镜像. 1. 基本结构 Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行. ...

  5. Docker 入门系列(6)- Docker 互联

    容器互联机制 容器的互联 (linking) 是一种让多个容器中应用进行快速交互的方式.它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的 IP 地址. 1. ...

  6. Docker 入门系列(4)- Docker 数据管理(挂载目录、挂载文件、数据卷挂载、数据卷共享、数据卷删除、数据卷容器备份和恢复)

    基于底层存储实现,Docker 提供了三种适用于不同场景的文件系统挂载方式:Bind Mount.Volume 和 Tmpfs Mount. Bind Mount 能够直接将宿主操作系统中的目录和文件 ...

  7. Docker 入门系列(3)- Docker 容器(创建、启动、终止、进入、删除、导入、导出容器、容器和镜像转化)

    Docker 容器 简单来说,容器是镜像的一个运行实例.所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层. 如果认为虚拟机是模拟运行的一整套操作系统(包括内核.应用运行态环境和其他系 ...

  8. Docker 入门系列(2)- Docker 镜像, 免 sudo 使用 docker 命令、获取查看、修改镜像标签、查找删除创建镜像、导入导出镜像

    1. 免 sudo 使用 docker 命令 如果还没有 docker group 就添加一个 sudo groupadd docker 将用户加入该 group 内 sudo gpasswd -a ...

  9. Docker 入门系列(8)— 免 sudo 使用 docker 命令、进入未启动的容器

    1. 免 sudo 使用 docker 命令 如果还没有 docker group 就添加一个 sudo groupadd docker 将用户加入该 group 内 sudo gpasswd -a ...

最新文章

  1. 【 C 】动态内存分配案例分析
  2. php怎么生成前端网页,PHP自动生成前端的表单框架
  3. iOS APP之本地数据存储(译)
  4. ux设计中的各种地图_移动应用程序设计中的常见UX错误
  5. PHP session的工作原理
  6. mysql 复制方式_MySQL复制方法
  7. 数列分块入门 5(LibreOj-6281)
  8. http服务器异步响应,4.异步非阻塞多进程的 Http 服务器
  9. C#曲线分析平台的制作(一,ajax+json前后台数据传递)
  10. java中charconst_C语言常量
  11. 信号处理学习笔记2——维纳滤波器
  12. 为什么越来越多的人从开发转测试?
  13. Aspose.Words 创建表格
  14. install4j的使用
  15. 1020:Anniversary Cake
  16. C语言基础指针知识点总结
  17. 中国医科大学22春学期《系统解剖学(本科)》实践考试试题【标准答案】
  18. python爬取糗事百科内容
  19. 祝贺嘉华集团获得汽车经销商集团信息化管理大奖
  20. 开源数据库 SQLite 发布 3.37.0 版本

热门文章

  1. restTemplate http请求报错:no suitable HttpMessageConverter found for response type and content type
  2. 2022-2028年中国物联网金融产业深度调研及投资前景预测报告
  3. 2022-2028年中国电子灌封胶行业市场研究及前瞻分析报告
  4. 解释型语言与编译型的必须知识点
  5. tensorflow问题
  6. pytorch之expand,gather,squeeze,sum,contiguous,softmax,max,argmax
  7. torch中的copy()和clone()
  8. LeetCode简单题之长按键入
  9. 聚类Clustering
  10. Python API vs C++ API of TensorRT