代码之家  ›  专栏  ›  技术社区  ›  Jaeger

caddy server+docker+traefik返回“404 site domain.com不在此接口上提供”

  •  1
  • Jaeger  · 技术社区  · 6 年前

    我正在使用Hugo框架来进行持续部署。我创建了一个包含caddy server、hugo和我用于测试的测试项目的图像,将其发送到运行traefik的服务器并启动该图像。

    这是dockerfile:

    FROM debian:latest
    
    RUN apt-get update -y && apt-get install git curl -y
    ADD https://github.com/gohugoio/hugo/releases/download/v0.42.2/hugo_0.42.2_Linux-64bit.deb /tmp/hugo.deb
    RUN dpkg -i /tmp/hugo.deb && rm /tmp/hugo.deb
    RUN curl https://getcaddy.com | bash -s personal
    RUN chown root:root /usr/local/bin/caddy && chmod 755 /usr/local/bin/caddy
    RUN mkdir /srv/app
    WORKDIR /srv/app
    COPY . ./
    RUN git clone https://github.com/RealOrangeOne/hugo-theme-revealjs.git themes/hugo-theme-revealjs
    RUN hugo
    EXPOSE 2015
    CMD ["caddy"]
    

    下面是“docker compose.yml”,它在我的服务器上运行我的项目:

    my_project:
      image: some_registry/my_project
      ports:
        - "2015:2015"
      labels:
        - "traefik.frontend.rule=Host:subdomain.domain.me"
    

    我差点忘了,这是我的档案:

    localhost:2015
    root /srv/app/public
    

    图像运行没有问题,但到达时 subdomain.domain.me ,我收到以下消息:

    404站点subdomain.domain.me未在此接口上提供服务

    但是,运行 curl http://localhost:2015 在服务器上打印项目的HTML。

    所以…我认为问题来自caddy,因为我在使用apache时没有问题,而且我的其他5个项目使用traefik时也没有问题。

    我的问题是:我应该如何编辑我的caddyfile,以便我没有这个问题?

    提前谢谢你

    2 回复  |  直到 6 年前
        1
  •  3
  •   Toby Allen mercator    6 年前

    Caddy正在寻找寻找本地主机的请求:2015。我猜您是在向机器转发请求,而不是向本地主机转发请求。

    使用-log path/to/log.log参数启动caddy,您可以看到请求是什么,或者尝试

    :2015
    root /srv/app/public
    

    这将满足2015年港口的任何要求。

        2
  •  1
  •   BMitch    6 年前

    容器网络要求容器内的应用程序监听所有接口。Docker无法从容器外部到达容器内部的环回接口,包括已发布的端口和容器到容器的网络。

    如果要限制对Docker主机上此端口的访问,可以限制Docker发布端口的接口:

    version: '3'
    services:
      my_project:
        image: some_registry/my_project
        ports:
          - "127.0.0.1:2015:2015"
        labels:
          - "traefik.frontend.rule=Host:subdomain.domain.me"
    

    在容器内,按照托比的建议通过从caddyfile中删除“localhost”来调整caddy配置。