【问题标题】:Docker with multiple exposed ports具有多个暴露端口的 Docker
【发布时间】:2016-10-21 15:17:45
【问题描述】:

我有一个容器,例如 3 个端口,1000(nodejs-express)、1001(python-flask)和 1002(angular2-client)暴露。当我使用

docker run --name test -d -p 1000:1000 -p 1001:1001 -p 1002:1002 docker_image

只有 Express 服务器在主机上工作正常。但是,当我登录到容器并执行curl 时,所有三台服务器都响应正常。

任何想法与 docker/host 的多个端口绑定发生了什么?

【问题讨论】:

  • 你能提供一些细节吗?工作不正常是什么意思?您是否无法联系到他们,或者他们没有为您提供您想要的东西。目前,我知道您无法通过本地主机快速访问服务器,但它们在容器内运行良好。你能给我们回docker ps吗?
  • 嗨 Titouan - 是的,这些端口不工作。我联系不上他们。这是 docker ps 的输出: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 25f293fb7dbf mvangala/bib:0.0.1 "/bin/bash ./run_serv" 19 seconds ago Up 13 seconds 0.0.0.0:7998-8000->7998- 8000/tcp dockerflow_test
  • 我使用的端口实际上是 7998,7999 和 8000(不是 1000-1002)。请让我知道你的想法。谢谢。
  • 服务是否允许接受外部连接?即对于 python 烧瓶:dixu.me/2015/10/26/… 它是否在 0.0.0.0 上侦听?
  • flask 默认连接到 127.0.0.1,当我使用 --host 0.0.0.0 重新运行时,它可以工作。那讲得通。我没有让角度服务器工作,因为它在开发模式下运行,我认为将其更改为 prod_mode() 应该可以完成这项工作。非常感谢大家。

标签: networking angular docker flask


【解决方案1】:

执行以下操作后:

  1. 在 DockerFile 上公开端口
  2. 为每个端口设置 -p 标志以对外公开

您只需要确保您的服务允许外部连接。

即对于 python 烧瓶:http://dixu.me/2015/10/26/How_to_Allow_Remote_Connections_to_Flask_Web_Service/ 默认监听是 localhost。确保它正在监听 0.0.0.0

【讨论】: