如何通过名称而不是IP地址到达docker集装箱?

有没有一种方法,我可以达到我的docker容器使用名称,而不是IP地址?

我听说过pipe道工,我也看到了一些docker工人的DNS和主机名types选项,但是我仍然无法将所有东西拼凑在一起。

感谢您的时间。

我不确定这是否有帮助,但这是我迄今为止所做的:

  • 使用docker-machine和vmwarevsphere驱动程序安装了Docker容器主机
  • 用docker-compose启动了所有的服务
  • 我可以使用IP和端口从networking上的任何其他机器获得所有的服务

我已经添加了一个DNS别名条目到我的专用networkingDNS服务器,它与docker-machine使用的计算机名称相匹配。 但是当机器启动并连接到networking时,机器总是select一个不同的IP地址。

我只是失去了在哪里解决这个问题:

  • networkingDNS服务器
  • docker机主机名
  • docker容器主机名
  • 可能是所有这些的组合

我可能正在寻找类似于这个问题的东西:

如何让docker使用我的networking路由器轻松地将dhcp ip分配给容器而不是pipe道?

任何大方向将是真棒…再次感谢!

如果你想开箱即用的解决scheme,你可能想检查例如Kontena 。 它采用了Weave的networking覆盖技术,该技术用于在服务之间创build虚拟专用LANnetworking。 由于可以通过service_name.kontena.local每个服务/容器。

Docker 1.10有一个内置的DNS。 如果您的容器连接到相同的用户定义的networking(创build一个networkingdocker network create my-network和运行你的容器--net my-network ),他们可以使用容器名称相互引用。 ( 文档 )。

凉!

一个警告,如果你使用Docker撰写,你知道它为你的容器名称,即<project name>_<service name>-#添加一个前缀。 这使得你的容器名称更难以控制,但是对于你的用例来说可能没有问题。 您可以通过在撰写模板中手动设置容器名称来覆盖泊坞窗撰写命名function,但是这样您将无法使用撰写进行缩放 。

假设你想从你docker-compose.yml文件的web容器中访问mysql容器,比如:

 web: build: . links: - mysql mysqlservice: image: mysql 

你会很高兴知道Docker Compose已经添加了一个指向mysql容器的mysqlservice域名(在web容器/etc/hosts )。

而不是寻找mysql容器的IP地址,你可以使用mysqlservice域名。

如果您想添加自定义域名,也可以使用extra_hosts参数。

你可能想试试dnsdock。 看起来很简单(!)设置。 看看http://blog.brunopaz.net/easy-discover-your-docker-containers-with-dnsdock/和https://github.com/tonistiigi/dnsdock

创build一个除docker0以外的新桥接networking,在其中运行你的容器,你可以通过它们的名字来引用这个networking中的容器。

Docker守护进程运行embedded式DNS服务器,为连接到用户定义networking的容器提供自动服务发现。 来自容器的名称parsing请求首先由embedded式DNS服务器处理。

尝试这个:

 docker network create <network name> docker run --net <network name> --name test busybox nc -l 0.0.0.0:7000 docker run --net <network name> busybox ping test 

首先,我们创build一个新的networking。 然后,我们运行一个名为test的busybox容器,在端口7000上监听(只是为了保持运行)。 最后,我们pingtesting容器的名称,它应该工作。

我使用--net参数更改了--net参数, --network预期运行:

 docker network create <network name> docker run --network <network name> --name <container name> <other container options> docker run --network <network name> --name <container name> <other container options>