dev机器上的docker容器通信

时间:2015-10-24 23:31:03

标签: docker

我有一个运行简单服务的容器,需要连接到elasticsearch。为此,我需要为我的服务提供elasticsearch的地址。我很困惑如何创建一个可以在生产和我的本地机器(mac)上使用的容器。如今人们如何提供这样的配置?

到目前为止,我已经想出让我的进程将环境变量作为参数,我可以使用docker run -e传递给容器。我似乎不太可能在生产中做这类事情。

3 个答案:

答案 0 :(得分:3)

  

我有一个运行简单服务的容器,需要连接到elasticsearch。为此,我需要为我的服务提供elasticsearch的地址

如果elasticsearch在同一主机上的自己的容器中运行(由同一个docker守护程序管理),那么您可以使用--link将其链接到您自己的容器(docker run阶段)选项(which sets environment variables

docker run --link elasticsearch:elasticsearch --name <yourContainer> <yourImage>

请参阅“Linking containers together

在这种情况下,您的容器配置可以是静态的,并且可以预先知道/写入,因为它会将搜索机器称为“elasticsearch”。

答案 1 :(得分:1)

如何将其写入应用程序的配置文件并使用-v将配置目录挂载到容器中?

为了使其更有条理,我使用Ansible进行编排。这样,您可以为应用程序提供配置文件的模板,而实际参数位于集中位置的相应Ansible playbook的变量文件中。 Ansible将负责将模板复制到所需位置,并为您执行变量替换。它最近也加强了Docker支持。

答案 2 :(得分:0)

环境变量绝对正常(我们会一直使用它们来处理这类事情),只要您使用的是服务名称,而不是ip地址。即使使用IP地址,只要您只有一个ES并且每次ES IP地址发生变化时您都愿意重新启动服务,您就没有问题。

你应该真的问一个知道如何在生产环境中解决这些问题的人,因为你不太可能成为你组织中唯一遇到过这个问题的人 - 连接到数据库构成了同样的问题。

如果您没有任何限制,那么您应该查看来自Hashicorp的Consul之类的内容。它会帮助你解决这个问题;如果你被允许使用它。