【问题标题】:mapping containers to docker host's /etc/hosts automatically with the same port for each container自动将容器映射到 docker 主机的 /etc/hosts,每个容器使用相同的端口
【发布时间】:2017-02-26 08:19:25
【问题描述】:

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

  • docker bridge 子网从 192.168.50.0/24 开始
  • 4 种服务:rabbit、spring-config、fares、checkin
  • 这些服务中的每一个都正确设置了其主机名,并且能够从子网 (192.168.50.0) 中找到彼此。 Ips 在此子网中动态归属,并且它们都从各自容器中的端口 8080 开始。
  • 从主机可以看到桥接网络,并且可以使用其 ip 访问容器的每个实例。

如果不将与 8080 不同的端口映射到 docker 主机,我将无法解析这些主机条目。

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

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

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    您不能将所有 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 容器设置为reverse proxy。反向代理容器可以绑定到端口 8080 并根据主机名将请求转发到正确的容器。您不需要绑定主机上其他容器的端口,因为您的反向代理正在转发请求。有一篇博文详细解释了它的工作原理:http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/

    【讨论】:

    • 好的,我想我会为子网中的每个容器设置静态 ip,然后从那里逐步工作。
    猜你喜欢
    • 2014-09-01
    • 2017-05-17
    • 1970-01-01
    • 2020-02-29
    • 2019-03-26
    • 2016-10-08
    • 2015-11-11
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多