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

新手上路,请多包涵

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

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

感谢您的时间。

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

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

我已向我的专用网络 DNS 服务器添加了一个 DNS 别名条目,它与 docker-machine 使用的机器名称相匹配。但是机器在启动并连接到网络时总是选择不同的 IP 地址。

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

  • 网络 DNS 服务器
  • 码头机器主机名
  • docker 容器主机名
  • 可能是所有这些的组合

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

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

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

原文由 Zhao Li 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 722
2 个回答

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

凉爽的!

如果您使用 Docker compose,请注意,它会为您的容器名称添加一个前缀,即 <project name>_<service name>-# 。这使您的容器名称更难以控制,但对于您的用例来说可能没问题。您可以 通过在 compose 模板中手动设置容器名称来覆盖 docker compose 命名功能,但是您将无法使用 compose 进行扩展

原文由 datacarl 发布,翻译遵循 CC BY-SA 4.0 许可协议

创建一个除 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 测试容器,它应该可以工作。

原文由 rogamba 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题