将容器映射到docker主机';s/etc/hosts自动为每个容器提供相同的端口

将容器映射到docker主机';s/etc/hosts自动为每个容器提供相同的端口,docker,docker-compose,Docker,Docker Compose,我有一个基本的docker compose设置,包括以下内容: 从192.168.50.0/24开始的docker网桥子网 4项服务:兔子、spring配置、票价、登记 这些服务中的每一个都正确设置了主机名,并且能够在子网(192.168.50.0)中找到彼此。IP动态地归属于该子网,并且它们都从各自容器中的端口8080开始 从主机上可以看到网桥网络,并且可以使用其ip访问容器的每个实例 如果不将8080以外的端口映射到docker主机,我就无法解析这些主机条目 对于我的主机的/etc/ho

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

  • 从192.168.50.0/24开始的docker网桥子网
  • 4项服务:兔子、spring配置、票价、登记
  • 这些服务中的每一个都正确设置了主机名,并且能够在子网(192.168.50.0)中找到彼此。IP动态地归属于该子网,并且它们都从各自容器中的端口8080开始
  • 从主机上可以看到网桥网络,并且可以使用其ip访问容器的每个实例
如果不将8080以外的端口映射到docker主机,我就无法解析这些主机条目

对于我的主机的/etc/hosts中的此条目: 192.168.50.1费用兔子配置书签入:仅当我明确地将服务的端口8080绑定到主机的端口8081、端口8082、端口8083时,服务才可访问。。。对于.yml文件中的每个服务


是否有其他方法确保即使从子网外部也可以通过dns名称发现服务?

您不能将所有4个容器绑定到主机上的同一端口。每个港口只有一个集装箱。但有一些变通办法:

选项1:为每个容器使用不同的端口
  • 对于exmaple,绑定端口8081、8082、8083和8084
  • 在/etc/hosts中,正确映射每个容器IP
  • 连接时,除了指定主机名外,还指定端口。像
    https://fares:8081
您的/etc/主机可能如下所示:

192.168.50.1 fares
192.168.50.2 rabbit
...
选项2:使用反向代理
您可以在Docker-compose.yml中将附加Docker容器设置为。反向代理容器可以绑定到端口8080,并根据主机名将请求转发到正确的容器。您不需要绑定主机上其他容器的端口,因为反向代理正在转发请求。有一篇博客文章详细解释了这是如何工作的:

好的,我想我将为子网中的每个容器设置静态IP,并从那里开始逐步工作。