35-外部世界如何访问容器?

上节我们学习了容器如何访问外部网络,今天讨论另一个方向:外部网络如何访问到容器?

答案是:端口映射

docker 可将容器对外提供服务的端口映射到 host 的某个端口,外网通过该端口访问容器。容器启动时通过-p参数映射端口:

容器启动后,可通过 docker ps 或者 docker port 查看到 host 映射的端口。在上面的例子中,httpd 容器的 80 端口被映射到 host 32768 上,这样就可以通过 <host ip>:<32768> 访问容器的 web 服务了。

除了映射动态端口,也可在 -p 中指定映射到 host 某个特定端口,例如可将 80 端口映射到 host 的 8080 端口:

每一个映射的端口,host 都会启动一个 docker-proxy 进程来处理访问容器的流量:

以 0.0.0.0:32773->80/tcp 为例分析整个过程:

  1. docker-proxy 监听 host 的 32773 端口。
  2. 当 curl 访问 10.0.2.15:32773 时,docker-proxy 转发给容器 172.17.0.2:80。
  3. httpd 容器响应请求并返回结果。

本章小结

在这一章我们首先学习了 Docker 的三种网络:none, host 和 bridge 并讨论了它们的不同使用场景;然后我们实践了创建自定义网络;最后详细讨论了如何实现容器与容器之间,容器与外部网络之间的通信。

本章重点关注的是单个主机内的容器网络,对于跨主机网络通信将在后面章节详细讨论。下一节开始学习 Docker 存储。

原文地址:https://www.cnblogs.com/mkxfs/p/10923403.html

时间: 2024-08-29 12:59:20

35-外部世界如何访问容器?的相关文章

外部世界如何访问容器? - 每天5分钟玩转 Docker 容器技术(37)

上节我们学习了容器如何访问外部网络,今天讨论另一个方向:外部网络如何访问到容器? 答案是:端口映射. docker 可将容器对外提供服务的端口映射到 host 的某个端口,外网通过该端口访问容器.容器启动时通过-p参数映射端口: 容器启动后,可通过 docker ps 或者 docker port 查看到 host 映射的端口.在上面的例子中,httpd 容器的 80 端口被映射到 host 32773 上,这样就可以通过 <host ip>:<32773> 访问容器的 web 服

容器如何访问外部世界?- 每天5分钟玩转 Docker 容器技术(36)

前面我们已经解决了容器间通信的问题,接下来讨论容器如何与外部世界通信.这里涉及两个方向: 容器访问外部世界 外部世界访问容器 容器访问外部世界 在我们当前的实验环境下,docker host 是可以访问外网的. 我们看一下容器是否也能访问外网呢? 可见,容器默认就能访问外网. 请注意:这里外网指的是容器网络以外的网络环境,并非特指 internet. 现象很简单,但更重要的:我们应该理解现象下的本质. 在上面的例子中,busybox 位于 docker0 这个私有 bridge 网络中(172.

2.3-docker网络-如何让外部网络访问容器资源

Docker 网络管理 - 外部访问容器 1.首先使用centos镜像新建一个容器,然后在该容器中安装httpd服务,并启动 2.再把该容器导成一个新的镜像(centos-httpd),然后再使用新镜像创建容器,并指定端口映射 docker run -itd -p 5123:80 centos-httpd bash  //-p 可以指定端口映射,本例中将容器的80端口映射为本地的5123端口 3.docker exec -it container_id  bash 4.启动httpd: /usr

Docker外部访问容器

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射. 当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口. 使用 docker ps 可以看到,本地主机的 49155 被映射到了容器的 5000 端口.此时访问本机的 49155 端口即可访问容器内 web 应用提供的界面. $ sudo docker run -d -P training/webapp python app.py $ sud

6.13 docker(一)外部访问容器

使用 docker container ls 可以看到,本地主机的 32768 被映射到了容器的 5000 端口.此时访问本机的 32768 端口即可访问容器内 web 应用提供的界面. [[email protected] ~]# docker run -d -P training/webapp python app.py 使用 hostPort:containerPort 格式本地的 5000 端口映射到容器的 5000 端口,可以执行 [[email protected] ~]# dock

智能合约如何可信的与外部世界交互

区块链应用中,外部世界如何与智能合约交互往往是一个容易被忽视的问题,很多的智能合约应用场景是根据一些外部事件,输出相应的结果,而传统的IT数据交互方式实际上并不能投入真正的工作.例如,按照农产品价格情况来支付投保人赔款的农产品价格险保单.传统IT人员一般认为是如下的流程:智能合约会在预定的时间,从期货交易场所获取农产品价格,然后按照获取的数据采取预设的行动.听起来很简单,但却不可能实现.为什么呢?因为这里存在两个问题,一是共识问题,二是受信任方问题. 一.共识问题 区块链是基于共识的系统,只有在

外部主机无法访问IIS发布的网站

在IIS中发布网站,在本地可以直接访问,但是其他主机不能访问改发布的网站. 此问题一般是IIS的配置或者防火墙的配置的原因. 如果禁用了以下防火墙入站规则会导致外部主机无法访问本地发布的网站,启用即可.

Dockerfile实现客户端通过网页访问容器的桌面和伪终端,主要的工具是guacamole

Dockerfile实现客户端通过网页访问容器的桌面和伪终端,主要的工具是guacamole. 首先来介绍guacamole,Guacamole是一种基于HTML5和AJAX技术的vnc客户端,有了它就可以直接通过web浏览器,快速访问vnc server上的Xwindows系统界面了.优酷上有一段关于Guacamole的视频演示在http://v.youku.com/v_show/id_XMTg4ODgwNDg0.html git上dockerfile代码:http://git.oschina

C++ 安全并发访问容器元素

C++ 安全并发访问容器元素 2014-9-24 flyfish 标准库STL的vector, deque, list等等不是线程安全的 例如 线程1正在使用迭代器(iterator)读vector 线程2正在对该vector进行插入操作,使vector重新分配内存,这样就造成线程1中的迭代器失效 STL的容器 多个线程读是安全的,在读的过程中,不能对容器有任何写入操作 多个线程可以同时对不同的容器做写入操作. 不能指望任何STL实现来解决线程难题,必须手动做同步控制. 方案1 对vector进