Caddy Server + Docker + Traefik returns “404 站点 domain.com 未在此接口上提供服务”

Caddy Server + Docker + Traefik returns "404 Site domain.com is not served on this interface"

我正在使用 Hugo 框架来解决持续部署问题。我创建了一个包含 Caddy 服务器、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"

差点忘了,这是我的 Caddyfile:

localhost:2015
root /srv/app/public

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

404 Site subdomain.domain.me is not served on this interface

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

所以...我认为问题出在 Caddy 上,因为我在使用 Apache 时没有问题,而我的大约 5 个其他项目使用 Traefik 没有问题。

我的问题是:我应该如何编辑我的 Caddyfile 才不会出现这个问题?

提前致谢

Caddy 正在寻找 localhost:2015 的请求。我猜你正在将请求转发到机器而不是本地主机。

用-log path/to/log.log参数启动Caddy,你可能会看到请求是什么,或者试试

:2015
root /srv/app/public

这将为来自 2015 端口的任何请求提供服务。

容器网络要求容器内的应用监听所有接口。 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"

在容器内,按照 Toby 的建议通过从 Caddyfile 中删除 "localhost" 来调整 caddy 配置。