如何通过名称而不是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>