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

A L*_*A L 34 dns hostname docker docker-compose docker-machine

有没有办法可以使用名称而不是IP地址访问我的docker容器?

我听说过管道工程,我已经看到了docker的一些dns和主机名类型选项,但我仍然无法将所有内容拼凑在一起.

感谢您的时间.

我不确定这是否有用,但这是我到目前为止所做的:

  • 使用docker-machine和vmwarevsphere驱动程序安装docker container host
  • 用docker-compose启动所有服务
  • 我可以使用IP和端口从网络上的任何其他计算机上获取所有服务

我已经将DNS别名条目添加到我的专用网络DNS服务器,它与docker-machine使用的机器名称相匹配.但是,当计算机启动并连接到网络时,它始终会选择不同的IP地址.

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

  • 网络DNS服务器
  • docker-machine主机名
  • docker container hostname
  • 可能是所有这些的组合

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

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

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

dat*_*arl 21

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

凉!

如果您使用Docker撰写,请注意,您知道它会为您的容器名称添加前缀,即<project name>_<service name>-#.这使您的容器名称更难以控制,但它可能适用于您的用例.您可以通过在撰写模板中手动设置容器名称覆盖docker compose命名功能,但之后您将无法使用compose进行缩放.

  • (更正)刚刚看到你写的关于缩放的最后一部分,现在我明白你来自哪里了!(原文)您应该能够使用 `docker-compose.yml` 并在服务中设置 `container_name: everything` 并且它不应该在前面添加任何内容,但如果我错了请纠正我,我经常在自定义网络。 (2认同)

Oli*_*y50 7

编辑 2018-02-17:Docker 最终可能会links从 docker-compose 中删除密钥,因此他们建议使用用户定义的网络,如下所述 => https://docs.docker.com/compose/compose-file/#links


mysql假设您想从文件web的容器到达容器docker-compose.yml,例如:

web:
  build: .
  links:
    - mysql

mysqlservice:
  image: mysql
Run Code Online (Sandbox Code Playgroud)

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

您无需寻找mysql容器 IP 地址,只需使用mysqlservice域名即可。

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


小智 5

创建除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
Run Code Online (Sandbox Code Playgroud)

首先,我们创建一个新的网络。然后,我们在端口7000上运行一个名为test的busybox容器(只是为了使其保持运行状态)。最后,我们按测试容器的名称ping它,它应该可以工作。