将容器自动映射到docker主机的/ etc / hosts,每个容器使用相同的端口

我有一个基本的docker-compose设置,包括以下内容:

  • docker桥子网从192.168.50.0/24开始
  • 4种服务:兔子,弹簧configuration,票价,签入
  • 这些服务中的每一个都有正确设置的主机名,并且能够从子网(192.168.50.0)内find对方。 Ips在该子网中dynamic归属,并且它们都在其各自容器内的端口8080上开始。
  • 在主机上,网桥是可见的,并且容器的每个实例都可以使用其ip来访问。

我不能设法解决这些主机条目没有映射到8080不同的端口到docker主机。

对于我的主机的/ etc / hosts中的这个条目:192.168.50.1 fares rabbit config book checkin:只有当我明确地将服务的端口8080绑定到我的主机端口8081,端口8082,端口8083 …服务在.yml文件中。

还有另外一种方法可以确保服务可以被dns名称发现,甚至可以从子网之外发现吗?

您不能将全部4个容器绑定到主机上的相同端口。 每个端口只有一个容器。 但是有一些解决方法:

选项1:为每个容器使用不同的端口

  • 例如,绑定端口8081,8082,8083和8084。
  • 在/ etc / hosts中,正确映射每个容器IP。
  • 连接时,除了主机名以外,还要指定端口。 像https://fares:8081

您的/ etc / hosts可能如下所示:

 192.168.50.1 fares 192.168.50.2 rabbit ... 

选项2:使用反向代理

您可以在docker-compose.yml中将另外的 Docker容器设置为反向代理 。 反向代理容器可以绑定到端口8080,并根据主机名将请求转发到正确的容器。 您不需要绑定来自主机上其他容器的端口,因为您的反向代理正在转发请求。 有一篇博客文章详细解释了这是如何工作的: http : //jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/