Caddy服务器+ Docker + Traefik返回“ 404 Site domain.com未在此界面上提供”

时间:2018-07-24 15:50:00

标签: docker traefik hugo caddy

我正在使用Hugo Framework进行持续部署。我创建了一个包含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未在此界面上投放

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

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

我的问题是:我应该如何编辑我的Caddyfile,以免出现此问题?

提前谢谢

2 个答案:

答案 0 :(得分:3)

Caddy正在寻找一个寻找localhost:2015的请求。我猜想您是将请求转发到计算机,而不是本地主机。

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

:2015
root /srv/app/public

这将满足端口2015上的任何请求。

答案 1 :(得分:1)

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

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

public class UserData : Prism.Mvvm.BindableBase
{
    private bool _validatedByUser;
    public bool ValidatedByUser
    {
        get
        {
            return _validatedByUser;
        }
        set
        {
            SetProperty(ref _validatedByUser, value);
        }
    }

    private string _userName;
    public string UserName
    {
        get
        {
            return _userName;
        }
        set
        {
            SetProperty(ref _userName, value);
        }
    }

    private double _userValue;
    public double UserValue
    {
        get
        {
            return _userValue;
        }
        set
        {
            SetProperty(ref _userValue, value);
        }
    }
    }

    public class ViewCell_Converter : BindableObject, IValueConverter
    {            
    public UserData UserData
    {
        get { return (UserData)GetValue(bindableProperty); }
        set { SetValue(bindableProperty, value); }
    }

    public static readonly BindableProperty bindableProperty = BindableProperty.Create(
                                                               nameof(UserData),
                                                               typeof(UserData),
                                                               typeof(ViewCell_Converter),
                                                               null);

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (UserData != null)
        {
            if (value is double _value)
            {
                if (UserData.ValidatedByUser)
                {
                    return string.Format("{0:0.00}", _value);
                }
                else
                {
                    return string.Format("{0:0.0000}", _value);
                }
            }
        }

        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

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