2015-02-17 127 views
0

我想将一些现有的服务器放置在码头集装箱内。我有两个:一个应用服务器和一个api服务器,但用node.js开发。我有他们都在一个Ubuntu的虚拟机内工作,并可以从外面的两个应用程序,这是伟大的。发送请求从一个码头集装箱到另一个

每台服务器都有自己的域。该应用服务器使用域名app和api服务器使用域名,我知道聪明的域名api。本地我将两个域添加到我的主机文件中,以指向分配给ubuntu vm的ip。

我遇到的唯一问题是从应用服务器发送的请求需要路由到api服务器。尝试编辑应用程序服务器容器(通过Dockerfile)和ubuntu vm的hosts文件,但请求失败。

有没有简单的方法来获取该请求不出去,并试图解决API域,但让它指向的API容器?

回答

3

这种典型的解决方案是使用多克的--link选项容器联系起来。也就是说,如果你这样做:

docker run -d --name api myapi 
docker run -d --name app --link api:api myapp 

然后app容器中,主机名api将映射到api容器。您还将有一组可用的环境变量来描述链接容器上的暴露端口。例如,如果你的“API”容器暴露的端口80,变量将是这样的:

API_PORT_80_TCP=tcp://172.17.0.10:80 
API_PORT_80_TCP_PORT=80 
API_PORT_80_TCP_PROTO=tcp 
API_PORT=tcp://172.17.0.10:80 
API_NAME=/app/api 
API_PORT_80_TCP_ADDR=172.17.0.10 

有一些缺点的链接选项:

  • 这只适用于托管在同一个物理容器主机
  • 如果重新启动“api”容器,则还必须重新启动“应用”容器。

如果您在多主机环境中运行,这两种特定问题都可能由您选择的编排工具解决。

+0

**环境变量不再用于连接到链接服务的推荐方法。** – 2017-05-22 11:39:54

+0

*(只有在使用旧版本1撰写文件格式时才会填写环境变量)* 而是使用链接名称(默认情况下为链接服务的名称)作为要连接的主机名称。 https://docs.docker.com/compose/link-env-deprecated/ – 2017-05-22 11:58:52

+0

** - 链接是遗留功能。** 您应该总是更喜欢使用Docker网络驱动程序进行链接。 – 2017-05-22 12:06:32

0

链接功能( - 链接)是一项遗留功能。

你应该总是喜欢使用在连接泊坞网络驱动程序。

:运行与Redis的结合到本地主机然后运行redis的-CLI命令并连接到Redis的服务器通过本地主机接口Redis的容器。

$ docker run -d --name redis example/redis --bind 127.0.0.1 
$ # use the redis container's network stack to access localhost 
$ docker run --rm -it --network container:redis example/redis-cli -h 127.0.0.1 

有关详细信息,请参阅文档。

https://docs.docker.com/compose/link-env-deprecated/

https://docs.docker.com/engine/reference/run/#network-settings

相关问题