docker宿主机随机端口映射了docker容器,如何让docker容器知道宿主机的IP与映射端口呢?

本人使用springcloud+docker的结构搭建微服务,现在遇到的问题是: docker宿主机使用-P命令随机端口绑定的docker指定端口(比…
关注者
14
被浏览
18,041

10 个回答

大概有些人其实不懂 Docker 吧。

先回到你的原问题中, 你想要知道 Docker 运行容器所映射的随机端口是吧, 那你完全可以通过 Docker 的 API 来完成这个需求。

好吧,顺便把具体命令给你

(MoeLove) ➜  ~ docker inspect --format '{{ range $k, $v:=.NetworkSettings.Ports}}{{ $k }} "=>" {{ $v}}{{end}}' $containerID
6379/tcp "=>" [{0.0.0.0 32768}]

替换掉其中的容器 ID 即可。

当然你也可能会问,我上面的例子是在宿主机上的, 你想在容器内完成,并且你想要让容器内的程序知道当前所在容器的 ID 是什么;

同样简单,默认情况下以 Docker 启动的容器,携带的 `HOSTNAME 环境变量,或者你去 `/etc/hosts` 下读文件也都可以拿到所在容器的 ID 的。

最后,你可能想问,如何能连接到容器。 通常情况下有两种方式:

  • 把 `docker.sock` 挂载进入容器内
  • 通过 `-H` 参数将 Docker 监听到一个 HTTP 端口上

两种方式中任选一个,然后使用任意的 Docker client 或者对应语言的的驱动程序都可以进行访问。

为什么需要知道宿主机的IP与端口呢?没看明白你的需求。

宿主端口映射完成,直接访问宿主端口,请求会到container中处理。或者你可以用Nginx做proxy。