如何通过 localhost 连接两个 Docker 容器?

12

我有两个运行在不同容器中的服务,一个是grunt(应用程序),运行在9000端口,另一个是sails.js(服务器),运行在1337端口。我想尝试让客户端应用通过localhost:1337连接到服务器。这可行吗?谢谢。

2个回答

12

主机

您无法使用localhost连接到其他容器(因为localhost是当前容器),但是您可以通过运行您的容器的主机来进行连接。在您的情况下,您需要使用boot2docker VM IP (echo $(boot2docker ip))。为了使其起作用,您需要在主机级别公开端口(这是通过-p 1337:1337完成的)。

链接

另一个最常见且我在可能情况下喜欢的解决方案是链接容器。

您需要在服务器docker run命令中添加--name标志:--name sails_server

您需要在应用程序docker run命令中添加--link标志:--link sails_server:sails_server

在应用程序内部,您将能够在sail_server:1337处访问服务器。您还可以使用环境变量来获取服务器IP。请参阅文档:https://docs.docker.com/userguide/dockerlinks/

奖励:DOCKER-COMPOSE

您的运行命令可能开始有点长...在这种情况下,我喜欢使用docker-compose,它允许我在一个文件中定义我的容器及其关系(卷、名称、链接、命令...)。


啊 kk,sails_server 是一个环境变量还是我可以直接在我的 .js 文件中访问它? - reconman
1
@reconman 当你链接容器时,Docker会更新/etc/hosts文件,这样你就可以直接使用sails_server了。 - Céline Aussourd
谢谢,那帮了很大的忙。 - reconman
1
我不满意。真的没有办法实现原来的目标吗? - Ben

-2

如果您在docker运行命令中使用参数-p 1337:1337,它将会将容器内的1337端口暴露到本地主机的1337端口。


1
我尝试过了,我可以从主机IP访问1337,但应用程序无法连接到localhost:1337。谢谢。 - reconman
1
容器中的 "localhost" 指的是容器本身。您需要使用主机的 IP 地址。或者您可以使用 Docker 链接。 - Adrian Mouat
1
你是否在虚拟机中运行Docker?如果你使用的是Mac OSX或Windows,则它会在一个名为boot2docker的虚拟机中运行。 - Mitch Dart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接