Docker:连接到外部数据库

我有我的应用程序连接的hbase实例运行,我们正在计划将应用程序移动到docker容器,但保持hbase运行docker外。 我可以使我的应用程序运行在docker集装箱连接到hbase通过使用add-host选项运行docker集装箱如下所示

docker run -dit --add-host hbasehost:xxx.xxx.xxx.xxx mydockerimage 

然而,我们需要的是swarm的自动扩展function,因为我们有多个服务来运行,如果我想运行我的应用程序作为docker服务而不是单个容器,我无法find任何引用到“docker service”中的“–add-host”

更新 :从docker 1.13你现在有一个类似的标志来添加条目到/etc/host

要在创build服务时添加主机,可以使用--host标志:

 docker service create --name myapp --host "hbasehost:xxx.xxx.xxx.xxx" --replicas 5 myimage 

要更新服务并在创build后添加其他主机,请使用--host-add标志:

docker service update --host-add "hbase:xxxx" myapp

您也可以使用--host-rm删除主机。


原始答案

--add-host只在/etc/hosts附加host:IP关联。

你可以使用--add-host来切换使用带有--env 环境variables ,尽pipe这需要对应用程序进行一些细微的修改,以便使用环境variables而不是主机名来连接到hbase。

 # Applies environment variables for all tasks in a service. docker service create --name myapp --replicas=5 --env HBASEHOST=xxx.xxx.xxx.xxx myimage 

然后,您可以使用以下方式扩展服务

 docker service scale myapp=20 

其他任务应该能够使用环境variables连接到hbase。

来源我是一个前Docker Swarmkit维护者

如果您将docker hosts指向可以在其上创buildlogging的internal dns serverdns server ,则可以在该DNS server上为您的hbasehost创buildAlogging。 容器将使用Internal Docker DNS然后回退到hosts DNS Server Settings 。 但是在/etc/hosts设置logging可以完成工作(weired)。

我的docker群节点的resolv.conf

 nameserver 10.110.1.25 nameserver 10.110.1.26 

现在从其中一个容器中进行validation:

 root@05d05f934c68:/# ping dc1.mydomain.net PING dc1.mydomain.net (10.110.1.25): 56 data bytes 64 bytes from 172.20.21.5: icmp_seq=0 ttl=121 time=0.929 ms