Closed chenkx-cd closed 9 months ago
感谢建议!
镜像大小是基础镜像造成的,你上面是基于alphine,我的是基于debian,它们因为系统和预装的差别,debian会稍微大一些,但功能也更齐全些。
我看到你这边没有装ca-certificates,是不是使用的是已有证书模式?我之前自己的测试结果是,不安装会导致Caddy自动颁发证书失败(https://github.com/abiosoft/caddy-docker/issues/173),你可以测试下看看。
还有区别就是,打镜像时有没有update包源,上面这样不update也是ok的,那就是当用户进入容器后需要捣鼓时,自己再手动update。
我目前这样写的原因,主要基于一个假设:用户可能会想进入到容器内去自己捣鼓一些东西。 基于这个假设,所以想选功能更齐全一些的debian,然后包尽量也都预先处理好。
我的测试结果是 Caddy 可以成功自动颁发证书,不知道你失败的原因是什么。
关于 ca-certificates,我看了 caddy 官方的 Dockerfile,在第4行有添加 ca-certificates。
update 包源有什么原因?如果只是安装 ca-certificates,这个问题在上面已经解决。
好的,稍后我会对ca-certificates再次进行测试
@RayWangQvQ 哈哈,老哥,能不能一时兴起把xray reality docker也写了。
最近使用的基于 Debian 的 Dockerfile,能自动申请证书
# 进行多平台构建时,在构建阶段的 `FROM` 中指明 `--platform=$BUILDPLATFORM`,利用交叉编译加速构建,见 https://www.docker.com/blog/faster-multi-platform-builds-dockerfile-cross-compilation-guide/
FROM --platform=$BUILDPLATFORM golang:1.20-bookworm AS build
WORKDIR /go
RUN set -eux \
&& go version \
&& go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest \
&& /go/bin/xcaddy build --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive \
&& wget "https://raw.githubusercontent.com/caddyserver/dist/master/config/Caddyfile" \
&& wget "https://raw.githubusercontent.com/caddyserver/dist/master/welcome/index.html"
# `FROM` 中未指明 `--platform` 时,默认自动添加 `--platform=$TARGETPLATFORM`,因此运行时阶段不需要特别指明
FROM debian:bookworm-slim
RUN set -eux \
&& mkdir -p \
/config/caddy \
/data/caddy \
/etc/caddy \
/usr/share/caddy
# 从构建阶段中复制 caddy 可执行文件等
COPY --from=build /go/caddy /usr/bin/caddy
COPY --from=build /go/Caddyfile /etc/caddy/Caddyfile
COPY --from=build /go/index.html /usr/share/caddy/index.html
RUN set -eux \
&& apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y ca-certificates libcap2-bin mailcap \
&& setcap cap_net_bind_service=+ep /usr/bin/caddy \
&& chmod +x /usr/bin/caddy \
&& caddy version \
&& apt-get remove --purge --auto-remove -y \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 见 https://caddyserver.com/docs/conventions#file-locations
ENV XDG_CONFIG_HOME /config
ENV XDG_DATA_HOME /data
EXPOSE 80
EXPOSE 443
EXPOSE 443/udp
EXPOSE 2019
WORKDIR /srv
CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"]
最近使用的基于 Debian 的 Dockerfile,能自动申请证书
# 进行多平台构建时,在构建阶段的 `FROM` 中指明 `--platform=$BUILDPLATFORM`,利用交叉编译加速构建,见 https://www.docker.com/blog/faster-multi-platform-builds-dockerfile-cross-compilation-guide/ FROM --platform=$BUILDPLATFORM golang:1.20-bookworm AS build WORKDIR /go RUN set -eux \ && go version \ && go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest \ && /go/bin/xcaddy build --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive \ && wget "https://raw.githubusercontent.com/caddyserver/dist/master/config/Caddyfile" \ && wget "https://raw.githubusercontent.com/caddyserver/dist/master/welcome/index.html" # `FROM` 中未指明 `--platform` 时,默认自动添加 `--platform=$TARGETPLATFORM`,因此运行时阶段不需要特别指明 FROM debian:bookworm-slim RUN set -eux \ && mkdir -p \ /config/caddy \ /data/caddy \ /etc/caddy \ /usr/share/caddy # 从构建阶段中复制 caddy 可执行文件等 COPY --from=build /go/caddy /usr/bin/caddy COPY --from=build /go/Caddyfile /etc/caddy/Caddyfile COPY --from=build /go/index.html /usr/share/caddy/index.html RUN set -eux \ && apt-get update \ && apt-get install --no-install-recommends --no-install-suggests -y ca-certificates libcap2-bin mailcap \ && setcap cap_net_bind_service=+ep /usr/bin/caddy \ && chmod +x /usr/bin/caddy \ && caddy version \ && apt-get remove --purge --auto-remove -y \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # 见 https://caddyserver.com/docs/conventions#file-locations ENV XDG_CONFIG_HOME /config ENV XDG_DATA_HOME /data EXPOSE 80 EXPOSE 443 EXPOSE 443/udp EXPOSE 2019 WORKDIR /srv CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"]
你这个证书到期能自动续吗
Dockerfile
我注意到你的 Dockerfile 代码似乎走了一些弯路,以至于后面的 docker-compose.yml 也多了一些不必要的配置。下面是我使用的 Dockerfile
最后构建出来的 image 的大小也小一些
docker-compose.yml
关于 docker-compose.yml 可以参考 caddy 官方的 Docker Compose example。
建议在 docker-compose.yml 中添加 443/udp 端口,NaïveProxy 已经支持 quic 协议,我测试了比 https 速度会快一些。