Docker:连接到外部数据库

时间:2016-11-22 05:30:45

标签: docker hbase docker-swarm

我运行了hbase实例,我的应用程序连接了,我们计划将应用程序移动到docker容器中,但保持hbase在docker之外运行。我可以让我的app在docker container中运行,在运行docker container时使用add-host选项连接到hbase,如下所示

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

然而我们需要的是swarm的自动缩放功能,因为我们有多个服务要运行,如果我想运行我的应用程序作为docker服务而不是单个容器,那么实现这个的正确方法是什么,我不能在“docker service”中找到对“--add-host”的任何引用

2 个答案:

答案 0 :(得分:6)

  

更新:从docker 1.13开始,您现在有一个类似的标志,可以将条目添加到/etc/host

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

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

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

docker service update --host-add "hbase:x.x.x.x" myapp

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

原始答案

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

您可以使用--add-host切换为使用环境变量--env,即使这需要对您的应用进行细微更改才能使用环境变量而不是主机名来连接到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

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

来源我是前Docker Swarmkit维护者

答案 1 :(得分:2)

如果您将docker hosts指向可以创建记录的internal dns serverdns server,则可以为A创建hbasehost条记录DNS server。容器将使用Internal Docker DNS然后回退到hosts DNS Server Settings。但是在/etc/hosts中设置记录可以完成工作(已经完成)。

我的泊坞窗群节点resolv.conf

nameserver 10.110.1.25
nameserver 10.110.1.26

现在从其中一个容器中验证:

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