1

我正在使用 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 站点 subdomain.domain.me 不在此界面上提供服务

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

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

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

先感谢您

4

2 回答 2

4

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

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

:2015
root /srv/app/public

这将服务于端口 2015 的任何请求。

于 2018-07-30T16:45:52.923 回答
1

容器网络要求容器内的应用程序侦听所有接口。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 配置。

于 2018-07-30T17:41:18.613 回答