让容器知道它在Docker中的暴露端口

时间:2014-07-09 14:50:18

标签: docker

让我们说我启动一个容器,将一个随机端口暴露给80,如下所示:docker run -d -p 80 -name my_container username/container

有没有办法告诉my_container他的80被暴露在哪个主持人的端口?

修改:我的情况:

我正在运行Apache来提供一些静态HTML文件,并在此容器上运行Go API服务器。我在这里公开这两项服务。静态文件在用户的浏览器上通过javascript从服务器请求数据,但是为了能够这样做,客户端需要知道API服务器在哪个端口可用,以便能够连接到它。这是否适合这样做?

2 个答案:

答案 0 :(得分:1)

我认为从容器容易告诉它的端口80所在的主机端口,但我也相信这是有充分理由的:制作依赖于此的容器会使其依赖于其包含的环境,这违背了Docker的逻辑。

如果你确实需要这个,你可以使用-e标志将主机端口作为环境变量传递给容器(假设主机端口是固定的),或者依赖于安装Docker之类的hack socket in 容器(-v /var/run/docker.sock:/var/run/docker.sock)并让它"检查自己" (类似于progrium/ambassadord实现 omni 模式所做的事情。)

也许您应该首先澄清为什么需要这些信息,也许还有一个更简单的解决方案可以帮助您实现这一目标。

答案 1 :(得分:0)

您可以运行显示端口的docker ps,例如

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                   NAMES
containerid         ubuntu:14.04        /bin/bash           14 seconds ago      Up 13 seconds       0.0.0.0:49153->80/tcp   my_container

在这种情况下,它是49153。

同样docker inspect会告诉你很多关于你的容器的信息,包括端口映射

$ docker inspect my_container | grep HostPort
"HostPort": "49153"