从主机与Docker内部的服务通信而不使用其IP

时间:2019-01-31 14:33:25

标签: docker

我有一个在主机上运行的进程,该进程需要与docker通信,并且我希望通过与IP不同的一些不可更改的参数(例如docker名称或主机名)来完成此操作(最好不要使用IP静态docker或为此安装外部docker。)

我知道docker可以在专用网络中按名称解析收件人,这就是我想要的,但不是在docker之间,而是在主机和docker上运行的进程之间。

找不到解决方案,可以解决吗?

编辑:

出于安全原因,我不允许使用主机网络并在主机上打开其他端口。

1 个答案:

答案 0 :(得分:1)

欢迎您选择更适合您需求的方式。

选项1.使用主机的网络。在这种情况下,Docker不会为容器创建单独的网络,您可以连接到容器的服务,就像它们将在您的主机上运行一样:

docker run --network=host <image_name>

此方法的缺点-隔离度低,因此安全性低。您无需在此处公开任何端口-如果服务在8080上侦听,只需打开localhost:8080即可享用。

第二种方法更正确-您暴露(以某种方式向前移动)容器中的内部端口并将它们映射到主机中的端口上。

docker run -p 8080:80 <image_name>

这会将端口80从容器映射到主机上的端口8080。与前面的示例一样,您仍然使用localhost进行连接,例如localhost:8080