Docker: 连接到外部数据库

Docker: Connecting to external database

我有我的应用程序连接的 hbase 实例 运行ning,我们计划将应用程序移动到 docker 容器中,但将 hbase 运行ning 保留在 docker 之外.我可以使 运行ning 在 docker 容器中使用添加主机选项连接到 hbase,而 运行ning docker 容器如下所示

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

然而,我们需要的是 swarm 的自动缩放功能,因为我们有多种服务 运行,如果我想 运行 我的应用程序作为 docker 服务而不是单个容器,我在 "docker service"

中找不到任何对“--add-host”的引用

Update: As of docker 1.13 you now have a similar flag to add entries to /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 仅在 /etc/hosts 中附加一个 host:IP 关联。

您可以从使用 --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 维护者

如果您将 docker hosts 指向可以创建记录的 internal dns serverdns server,您可以为 [=16= 创建 A 记录] 在那 DNS server 上。容器将使用 Internal Docker DNS,然后退回到 hosts DNS Server Settings。但是在 /etc/hosts 中创造记录完成工作(很奇怪)。

我的docker群节点的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