如何分配主机名到Docker容器?

我在Windows上运行Docker(不是本地版本,即通过docker-machine在VM上运行的版本)。

目前我有这样的访问网站:

 192.168.99.100:8080 for website 1 192.168.99.100:8081 for website 2 192.168.99.100:8082 for website 3 

这显然是一个真正的痛苦。

我希望能够做到这一点,我用Apache虚拟主机,我修改hosts文件,然后可以只是input类似的东西: website1.dev

我如何做到这一点的Docker容器?

我的第一个解决scheme是简单地将以下内容附加到Windows机器上的hosts文件中,如下所示:

 192.168.99.100 docker.dev 

然而, docker.dev只会转发到192.168.99.100:80 (即网站1),因为你不能把端口放在主机文件上。

192.168.99.100是docker-machine的IP地址:为这个IP分配一个名字,你需要自己修改Windows hosts文件 。

那假设docker机VM的IP已经被修复了: 在这个答案中看到我的脚本 。

要实际redirect到虚拟机中的正确的Apache服务器,您需要另一个容器,它将:

  • 侦听端口80默认情况下
  • 分析url和proxy-pass(redirect)到正确的实际url:port。

     http://website1.dev => redirect to port 8080 http://website2.dev => redirect to port 8081 http://website3.dev => redirect to port 8082 

(与网站website1.devwebsite2.devwebsite3.dev都添加在Windows主机文件,具有相同的url192.168.99.100)

例如,检查traefik


这与其他容器所看到的容器的主机名不同。

docker-compose extra-host确实等同于docker run --add-host

但是docker-compose可以使用hostname:直接将主机名修复到容器。
这应该足以通过其名称来引用每个容器。