有没有办法可以使用名称而不是ip地址来访问我的docker容器?
我听说过管道工程,我已经看到了码头工具的一些dns和主机名类型选项,但我仍然无法将所有东西拼凑在一起。
感谢您的时间。
我不确定这是否有用,但这是我到目前为止所做的:
我已将DNS别名条目添加到我的专用网络DNS服务器,它与docker-machine使用的计算机名称相匹配。但是当机器启动并连接到网络时,机器总是会选择不同的IP地址。
我很遗憾在哪里解决这个问题:
我可能正在寻找类似这个问题的东西:
How can let docker use my network router to assign dhcp ip to containers easily instead of pipework?
任何大方向都会很棒......再次感谢!
答案 0 :(得分:18)
Docker 1.10
有一个内置的DNS。如果您的容器连接到相同的用户定义的网络(创建网络docker network create my-network
并使用--net my-network
运行容器),则他们可以使用容器名称互相引用。 (Docs)。
酷!
如果您使用Docker撰写,请注意,您知道它会为您的容器名称添加前缀,即<project name>_<service name>-#
。这使您的容器名称更难以控制,但它可能适用于您的用例。你可以override the docker compose naming functionality by manually setting the container name in your compose template, but then you wont be able to scale with compose。
答案 1 :(得分:4)
编辑2018-02-17:Docker最终可能会从docker-compose中删除links
密钥,因此他们建议使用此处所述的user-defined networks =&gt; https://docs.docker.com/compose/compose-file/#links
假设您想要从mysql
文件的web
容器中访问docker-compose.yml
容器,例如:
web:
build: .
links:
- mysql
mysqlservice:
image: mysql
您很高兴知道Docker Compose已经添加了mysqlservice
域名(在web
容器/etc/hosts
中),该域名指向mysql
容器
您可以只使用mysql
域名,而不是查找mysqlservice
容器IP地址。
如果您想添加自定义域名,也可以使用extra_hosts参数。
答案 2 :(得分:4)
您可能想尝试使用dnsdock。看起来很简单(!)设置。请查看http://blog.brunopaz.net/easy-discover-your-docker-containers-with-dnsdock/和https://github.com/tonistiigi/dnsdock。
答案 3 :(得分:4)
创建一个除docker0之外的新桥接网络,在其中运行容器,您可以通过其名称引用该网络内的容器。
Docker守护程序运行嵌入式DNS服务器以提供自动服务 发现连接到用户定义网络的容器。名称 来自容器的解析请求首先由 嵌入式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
首先,我们创建一个新网络。然后,我们在端口7000上运行一个名为 test 的busybox容器(只是为了让它保持运行)。最后,我们按名称ping测试容器,它应该可以工作。
答案 4 :(得分:3)
如果您想要开箱即用的解决方案,您可能需要查看示例Kontena。它配备了Weave的网络覆盖技术,该技术用于在服务之间创建虚拟专用LAN网络。多亏了actionPerformed(ActionEvent ae)
可以访问每个服务/容器。
答案 5 :(得分:1)
我使用--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>