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 server
或dns server
,则可以在该DNS server
上为您的hbasehost
创buildA
logging。 容器将使用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