我运行了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”的任何引用
答案 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 server
或dns 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