【问题标题】:docker container networking to connect localhost in one container to anotherdocker 容器网络将一个容器中的本地主机连接到另一个容器
【发布时间】:2019-11-22 21:23:55
【问题描述】:
我正在使用 docker 的默认桥接网络(是的,我对 docker 比较陌生)。我有两个码头集装箱。
第一个容器在 12345 端口提供服务。创建这个容器时,我没有指定 --publish 选项,因为我不想将此端口暴露给外界。
第二个容器需要使用第一个容器的服务。但是,在第二个容器中运行的应用程序被硬编码以访问位于 127.0.0.1:12345 的服务。显然,第二个容器的 localhost 与第一个容器不同。有没有办法让 docker 网络认为第二个容器中的 localhost 实际上应该连接到第一个容器中的端口,而不向外界暴露任何东西?
【问题讨论】:
标签:
docker
networking
containers
【解决方案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, source build = ?)
- 让它在容器启动/重启时运行。