Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dns 如何通过名称而不是IP地址访问docker容器?_Dns_Docker_Hostname_Docker Compose_Docker Machine - Fatal编程技术网

Dns 如何通过名称而不是IP地址访问docker容器?

Dns 如何通过名称而不是IP地址访问docker容器?,dns,docker,hostname,docker-compose,docker-machine,Dns,Docker,Hostname,Docker Compose,Docker Machine,是否有一种方法可以使用名称而不是ip地址访问docker容器 我听说过pipework,也见过docker的一些dns和主机名类型选项,但我仍然无法将所有内容组合在一起 谢谢你抽出时间 我不确定这是否有帮助,但这是我迄今为止所做的: 使用docker机器和vmwarevsphere驱动程序安装docker容器主机 使用docker compose启动所有服务 我可以使用IP和端口从网络上的任何其他机器访问所有服务 我已经向我的专用网络DNS服务器添加了一个DNS别名条目,它与docker机器

是否有一种方法可以使用名称而不是ip地址访问docker容器

我听说过pipework,也见过docker的一些dns和主机名类型选项,但我仍然无法将所有内容组合在一起

谢谢你抽出时间

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

  • 使用docker机器和vmwarevsphere驱动程序安装docker容器主机
  • 使用docker compose启动所有服务
  • 我可以使用IP和端口从网络上的任何其他机器访问所有服务
我已经向我的专用网络DNS服务器添加了一个DNS别名条目,它与docker机器使用的机器名匹配。但是当机器启动并连接到网络时,它总是选择不同的IP地址

我只是不知道该在哪里解决这个问题:

  • 网络DNS服务器
  • docker计算机主机名
  • docker容器主机名
  • 可能是它们的某种组合
我可能在寻找类似于这个问题的东西:


任何大方向都会很棒…再次感谢

如果您想要开箱即用的解决方案,您可能需要检查例如。它与来自的网络覆盖技术一起提供,该技术用于在服务之间创建虚拟专用LAN网络。由于每个服务/容器都可以通过
service\u name.kontena.local

编辑2018-02-17:Docker最终可能会从Docker compose中删除
链接
键,因此他们建议按此处所述使用=>


假设您希望从
docker compose.yml
文件的
web
容器访问
mysql
容器,例如:

web:
  build: .
  links:
    - mysql

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

您可以只使用
mysqlservice
域名,而不是查找
mysql
容器IP地址


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

您可能需要尝试使用dnsdock。向前看,易于(!)设置。请看一看。

Docker
1.10
具有内置DNS。如果您的容器连接到同一个用户定义的网络(创建网络
docker network create my network
并使用
--net my network
运行您的容器),它们可以使用容器名称相互引用。()


如果使用Docker compose,需要注意的一点是,它会在容器名称中添加前缀,即
\uu-#
。这使得您的容器名称更难控制,但对于您的用例来说可能还可以。你可以

创建一个除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
docker网络创建
docker run--net--name test busybox nc-l 0.0.0.0:7000
docker运行--net busybox ping测试
首先,我们创建一个新的网络。然后,我们在端口7000上运行一个名为test的busybox容器(只是为了让它保持运行)。最后,我们根据测试容器的名称ping它,它应该可以工作

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

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>
docker网络创建
docker run--网络--名称
docker run--网络--名称

这是否允许您使用
service\u name.kontena.local
从主机连接到容器公开的端口?链接是否将被删除?:-O(更正)刚刚看到了你写的关于缩放的最后一部分,现在我知道你来自哪里了!(原创)您应该能够在服务中使用
docker compose.yml
并设置
container\u name:anything
,并且它不应该预先添加任何内容,但如果我错了,请纠正我。我经常在自定义网络上这样做。看看,您可以使用DPS来实现这一点,同时,您可以利用其他一些功能