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

比方说,我启动一个容器,暴露一个随机端口为80像这样: docker run -d -p 80 -name my_container username/container

有没有办法告诉my_container他的80端口在哪个主机的端口上?

编辑 :我的情况:

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

我不认为从容器中可以很容易地看出其端口80所在的主机端口,但我也相信有一个很好的理由:使得容器依赖于它将使其依赖于其容纳环境,这违背了Docker的逻辑。

如果你真的需要这个,你可以使用-e标志(假设主机端口是固定的)将主机端口作为环境variables传递给容器,或者依靠诸如容器中安装Docker套接字之类的破解( -v /var/run/docker.sock:/var/run/docker.sock ),然后“检查自己”(类似于progrium/ambassadord实现全向模式)。

也许你应该首先澄清为什么你需要这些信息,也许有一个更简单的解决scheme可以帮助你达到目的。

例如,你可以运行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"