让我们说我启动一个容器,将一个随机端口暴露给80,如下所示:docker run -d -p 80 -name my_container username/container
。
有没有办法告诉my_container
他的80被暴露在哪个主持人的端口?
修改:我的情况:
我正在运行Apache来提供一些静态HTML文件,并在此容器上运行Go API服务器。我在这里公开这两项服务。静态文件在用户的浏览器上通过javascript从服务器请求数据,但是为了能够这样做,客户端需要知道API服务器在哪个端口可用,以便能够连接到它。这是否适合这样做?
答案 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"