【问题标题】:Resolving subdomain.localhost doesn't work with docker swarm解析 subdomain.localhost 不适用于 docker swarm
【发布时间】:2018-07-18 05:51:22
【问题描述】:

我想要达到的目标:

  • 本地主机上的 docker swarm
  • dockerized 反向代理,它将 subdomain.domain 转发到带有应用程序的容器
  • 带有应用程序的容器

我做了什么:

  • 将 /etc/hosts 更改为现在的样子:

    127.0.0.1 本地主机
    127.0.0.1 subdomain.localhost

  • 设置 traefik 将 word.beluga 转发到特定容器

有什么问题:

  • 无法通过子域访问容器。如果我使用端口,它可以工作
  • curl 为子域和端口提供不同的结果

问题:

  • 有什么问题?为什么?
  • 如何调试它并找出问题是基于 docker 还是基于网络? (如何检查请求是否到达了我的容器)

我要补充一点,我也尝试在 docker-machine (virtualbox) 上执行此操作,但没有成功。所以我已经转移到 localhost,但正如你所见,它并没有太大帮助。

我正在失去希望,所以任何提示将不胜感激。提前谢谢你

【问题讨论】:

    标签: linux docker dns docker-swarm


    【解决方案1】:

    回复晚了,但我能够使用 Traefik 的 2.x routers 功能实现这一点,如下所示:

    labels:
          - "traefik.http.routers.<unique name>.rule=Host(`subdomain.localhost`)"
    

    在 docker-compose 文件中

    version: '3.9'
    services:
      app:
        image: myapp:latest    
        labels:
          - "traefik.http.routers.myapp.rule=Host(`myapp.localhost`)"
      
      reverse-proxy:
        image: traefik:v2.4
          command: --api.insecure=true --providers.docker    
          ports:
            - "80:80"
            # The Web UI (enabled by --api.insecure=true)
            - "9000:8080"
          volumes:
            # So that Traefik can listen to the Docker events
            - /var/run/docker.sock:/var/run/docker.sock
    

    我认为它起作用的原因是 Treafik 正在拦截 localhost 上的所有内容,然后应用规则,因此它的 Traefik 特定答案。

    【讨论】:

      【解决方案2】:

      没有像 localhost 的子域这样的东西。按照几乎通用的约定,localhost 解析为 IPv4 地址 127.0.0.1 和 IPv6 地址 ::1。

      您仍然可以使用 docker 测试虚拟主机,但您必须使用端口:

      curl -H Host:sub.localhost http://localhost:8000

      【讨论】:

        猜你喜欢
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        • 2019-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-11
        相关资源
        最近更新 更多