docker容器网络将一个容器中的localhost连接到另一个容器

时间:2019-11-22 21:23:55

标签: docker networking containers

我正在为docker使用默认的桥接网络(是的,我对docker还是比较陌生的)。我有两个Docker容器。

第一个容器在端口12345上提供服务。创建此容器时,我没有指定--publish选项,因为我不想将此端口暴露给外界。

第二个容器需要使用第一个容器中的服务。但是,在此第二个容器中运行的应用程序已进行硬编码以访问位于127.0.0.1:12345的服务。显然,第二个容器的本地主机与第一个容器不同。有没有一种方法可以使Docker网络连接,认为第二个容器中的localhost实际上应该连接到第一个容器中的端口,而又不暴露任何外部环境?

1 个答案:

答案 0 :(得分:1)

选项N :(此方法可行,但可能不是最佳解决方案)

可以强制这种行为的一种方式是通过注入附加服务以绑定到应用程序容器上的端口并将其向外重定向。

socat TCP-LISTEN:12345,fork TCP:172.18.0.2:12345

在这里进行快速测试,我能够确认127.0.0.1:12345被视为远程12345

注意事项:

  • 两个容器必须能够相互到达
  • 这违反了每个容器一项服务的建议。
  • 将应用程序放入docker容器。 (yum / apt-get install socat,源代码构建=吗?)
  • 让其在容器启动/重新启动时在启动时运行。