如何为 Docker 中的容器分配域名?

新手上路,请多包涵

这些天我正在阅读很多关于如何设置和运行 docker 堆栈的信息。但是我总是错过的一件事是如何设置特定容器通过其域名响应访问,而不仅仅是使用 docker dns 的容器名称。

我的意思是,也就是说我有一个可以从外部访问的微服务,例如:users.mycompany.com,它将通过处理用户 api 的微服务容器

然后,当我尝试访问 customer-list.mycompany.com 时,它将进入处理客户列表的微服务容器

当然,使用 docker dns 我可以访问它们并将它们链接到 docker 网络,但这仅适用于想要访问容器到容器,而不是互联网到容器。

有人知道我应该怎么做吗?或者设置它的最佳方式。

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

阅读 1.5k
2 个回答

因此,您需要使用端口发布的概念,以便您的容器中的端口可以通过主机的端口访问。使用它,您可以从 Nginx 设置一个简单的 _proxypass ,它将 users.mycompany.com 重定向到 myhost:1337假设您将端口发布到 1337

因此,如果您想这样做,您需要设置您的容器以使用以下方式公开某个端口:

 docker run -d -p 5000:5000 training/webapp # publish image port 5000 to host port 5000

然后,您可以从主机 curl localhost:5000 访问容器。

 curl -X GET localhost:5000

如果你想在前面设置一个域名,你需要有一个网络服务器实例,它允许你将你的主机名 代理 传递给你的容器。

即在 Nginx 中:

 server {
  listen 80;
  server_name users.mycompany.com;
  location / {
    proxy_pass http://localhost:5000;
  }
}

我建议您按照 本教程 进行操作,并可能检查 docker run 参考

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

据我所知,Docker 并没有开箱即用地提供此功能。但这里肯定有几种解决方法。事实上,您需要在您的主机上部署一个 DNS 来区分容器并在动态 IP 中解析它们的域名。因此,您可以尝试:

  1. 部署一些 Docker-aware DNS 解决方案(我建议你使用 SkyDNSv1 / SkyDock );

  2. 配置您的主机以使用此 DNS(默认情况下, SkyDNS 使容器通过名称相互认识,但主机不知道);

  3. 使用显式 --hostname 运行您的容器(您可能会使用方案 container_name.image_name.dev.skydns.local

您也可以跳过 第 2 步并在容器内运行浏览器。它将通过主机名发现 Web 应用程序容器。

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

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