我有一个运行简单服务的容器,需要连接到elasticsearch。为此,我需要为我的服务提供elasticsearch的地址。我很困惑如何创建一个可以在生产和我的本地机器(mac)上使用的容器。如今人们如何提供这样的配置?
到目前为止,我已经想出让我的进程将环境变量作为参数,我可以使用docker run -e
传递给容器。我似乎不太可能在生产中做这类事情。
答案 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之类的内容。它会帮助你解决这个问题;如果你被允许使用它。