如何将域名分配给docker中的容器

我正在阅读很多关于如何设置和运行docker堆栈的信息。 但我总是错过的东西之一是如何设置特定的容器响应通过他们的域名访问,而不是使用docker的DNS的容器名称。

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

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

当然,使用docker dns我可以访问它们并将它们链接到dockernetworking中,但是这只能用于访问容器到容器,而不是Internet到容器。

有人知道我该怎么做吗? 或者设置这个最好的方法。

因此,您需要使用端口发布的概念,以便您的容器中的端口可以通过主机的端口访问。 使用这个,你可以设置一个简单的proxy_pass从一个nginx将redirectusers.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 

如果你想在前面设置一个域名,你将需要一个web服务器实例,允许你将你的主机名proxy_pass到你的容器。

即在nginx中:

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

我build议你按照这个教程 ,也许检查docker运行引用

据我所知,Docker不提供这个function。 但是,这里肯定有几个解决方法。 实际上,您需要在主机上部署DNS,以区分容器并在dynamicIP中parsing其域名。 所以你可以试试看:

  1. 部署一些支持Docker的DNS解决scheme(我build议你使用SkyDNSv1 / SkyDock);

  2. configuration您的主机使用这个DNS(默认情况下,SkyDNS使容器相互了解,但主机不知道);

  3. 用明确的–hostname运行你的容器(你可能会使用scheme容器名。图像名称.dev.skydns.local)

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