Docker:连接外部数据库

10

我有一个正在运行的HBase实例,我的应用程序连接到它。我们计划将该应用程序移动到Docker容器中,但保持HBase在Docker之外运行。我可以使用以下方法在运行Docker容器时使用add-host选项使我的应用程序在Docker容器中运行并连接到HBase。

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

然而我们需要的是Swarm的自动扩展功能,因为我们有多个服务需要运行,如果我想将我的应用程序作为Docker服务而不是单独的容器运行,实现这一点的正确方式是什么,我在“docker service”中找不到“--add-host”的任何参考。

2个回答

7

更新:自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中。

尽管这需要对应用程序进行轻微更改以使用环境变量而不是主机名连接到HBase,但您可以从使用--add-host切换到使用环境变量以及--env

# 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的维护者


2
如果你将你的docker hosts指向一个内部dns服务器或者一个你可以在上面创建记录的dns服务器,那么你可以在那个DNS服务器上创建一个A记录来记录你的hbasehost。容器将使用Internal Docker DNS然后回退到hosts DNS Server Settings。但是在/etc/hosts中设置一条记录也可以完成工作(奇怪)。
我的docker swarm节点的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接