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 配置。
我正在使用 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 配置。