
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
注意:这是 https://hub.docker.com/_/caddy 的 amd64 架构构建的"per-architecture"仓库——更多信息,请参见官方镜像文档中的"除amd64外的架构?"[https://github.com/docker-library/official-images#architectures-other-than-amd64] 和官方镜像FAQ中的"镜像源在Git中更改后怎么办?"[https://github.com/docker-library/faq#an-images-source-changed-in-git-now-what%5D%E3%80%82
维护者:
https://github.com/caddyserver/caddy-docker
获取帮助:
Caddy社区论坛
Dockerfile 链接(参见FAQ中的"‘Shared’和‘Simple’标签有什么区别?"[https://github.com/docker-library/faq#whats-the-difference-between-shared-and-simple-tags%5D%E3%80%82%EF%BC%89
https://github.com/caddyserver/caddy-docker/blob/5572371a83e48fd0368a4917d0fc48e44ef30582/2.10/alpine/Dockerfile
https://github.com/caddyserver/caddy-docker/blob/5572371a83e48fd0368a4917d0fc48e44ef30582/2.10/builder/Dockerfile
2.10.2, 2.10, 2, latest:
2.10.2-builder, 2.10-builder, 2-builder, builder:
问题提交地址:
https://github.com/caddyserver/caddy-docker/issues?q=
支持的架构:(https://github.com/docker-library/official-images#architectures-other-than-amd64)
https://hub.docker.com/r/amd64/caddy/, https://hub.docker.com/r/arm32v6/caddy/, https://hub.docker.com/r/arm32v7/caddy/, https://hub.docker.com/r/arm64v8/caddy/, https://hub.docker.com/r/ppc64le/caddy/, https://hub.docker.com/r/riscv64/caddy/, https://hub.docker.com/r/s390x/caddy/, https://hub.docker.com/r/winamd64/caddy/
已发布镜像 artifact 详情:
https://github.com/docker-library/repo-info/blob/master/repos/caddy%EF%BC%88https://github.com/docker-library/repo-info/commits/master/repos/caddy%EF%BC%89
(镜像元数据、传输大小等)
镜像更新:
https://github.com/docker-library/official-images/issues?q=label%3Alibrary%2Fcaddy
https://github.com/docker-library/official-images/blob/master/library/caddy%EF%BC%88https://github.com/docker-library/official-images/commits/master/library/caddy%EF%BC%89
本描述的来源:
https://github.com/docker-library/docs/tree/master/caddy%EF%BC%88https://github.com/docker-library/docs/commits/master/caddy%EF%BC%89
!https://raw.githubusercontent.com/docker-library/docs/7f3881a28c29ed29bb1a38681b95bd785a8a6da5/caddy/logo.png
Caddy 2 是一款功能强大的企业级开源Web服务器,采用Go语言编写,具备自动HTTPS功能。
⚠️ 关于持久化数据的说明
Caddy需要对两个位置具有写权限:数据目录和配置目录。虽然不必持久化配置目录中的文件(但可能会方便),但持久化数据目录非常重要。
根据文档:
数据目录不得视为缓存。其内容不是临时的或仅为性能而存在。Caddy将TLS证书、私钥、OCSP staples和其他必要信息存储在数据目录中。未经了解相关影响,不应清除该目录。
此镜像提供两个卷挂载点:/data和/config。
在以下示例中,命名卷caddy_data挂载到/data,以便数据得以持久化。
注意,命名卷在容器重启和终止后仍会保留,因此当迁移到新版本镜像时,可以重用相同的数据和配置目录。
默认配置文件仅从/usr/share/caddy提供文件,因此如果要从当前工作目录提供index.html:
console$ echo "hello world" > index.html $ docker run -d -p 80:80 \ -v $PWD/index.html:/usr/share/caddy/index.html \ -v caddy_data:/data \ amd64/caddy ... $ curl http://localhost/ hello world
要覆盖默认的https://github.com/caddyserver/dist/blob/master/config/Caddyfile%EF%BC%8C%E5%8F%AF%E4%BB%A5%E5%9C%A8%60$PWD/conf%60%E5%AD%90%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%60Caddyfile%60%EF%BC%8C%E5%B9%B6%E5%B0%86%E6%AD%A4%E6%96%87%E4%BB%B6%E5%A4%B9%E6%8C%82%E8%BD%BD%E5%88%B0%60/etc/caddy%60%EF%BC%9A
console$ docker run -d -p 80:80 \ -v $PWD/conf:/etc/caddy \ -v caddy_data:/data \ amd64/caddy
⚠️ 不要将Caddyfile直接挂载到/etc/caddy/Caddyfile
如果使用vim或其他会更改编辑文件inode的编辑器,只有在重新创建容器时,更改才会在容器内生效,详情参见此Medium文章。使用此类编辑器时,Caddy的平滑重载功能可能无法按预期工作,如https://github.com/caddyserver/caddy/issues/5735#issuecomment-***%E4%B8%AD%E6%89%80%E8%BF%B0%E3%80%82
默认Caddyfile仅监听80端口,未设置自动TLS。但如果您的站点有域名,且其A/AAAA DNS记录已正确指向此机器的公网IP,则可以使用以下命令通过HTTPS提供站点服务:
console$ docker run -d --cap-add=NET_ADMIN -p 80:80 -p 443:443 -p 443:443/udp \ -v /site:/srv \ -v caddy_data:/data \ -v caddy_config:/config \ amd64/caddy caddy file-server --domain example.com
关键在于Caddy能够监听80和443端口,这两个端口都是ACME HTTP挑战所必需的。
有关自动HTTPS支持的更多信息,请参见Caddy文档!
大多数部署生产站点的用户不会希望依赖将文件挂载到容器中,而是会基于amd64/caddy构建自己的镜像:
Dockerfile# 注意:在生产站点中切勿使用:latest标签 FROM amd64/caddy:<version> COPY Caddyfile /etc/caddy/Caddyfile COPY site /srv
添加自定义Caddy模块
Caddy可通过"模块"进行扩展。有关完整详情,请参见[***]
您可以使用:builder镜像作为构建新Caddy二进制文件的快捷方式:
DockerfileFROM amd64/caddy:<version>-builder AS builder RUN xcaddy build \ --with github.com/caddyserver/nginx-adapter \ --with github.com/hairyhenderson/caddy-teapot-module@v0.0.3-0 FROM amd64/caddy:<version> COPY --from=builder /usr/bin/caddy /usr/bin/caddy
注意第二个FROM指令——通过简单地将新构建的二进制文件覆盖到常规amd64/caddy镜像上,生成的镜像体积会小得多。
xcaddy工具用于https://github.com/caddyserver/caddy/blob/4217217badf220d7d2c25f43f955fdc8454f2c64/cmd/caddy/main.go#L15..L25%EF%BC%8C%E5%B9%B6%E5%8C%85%E5%90%AB%E6%8F%90%E4%BE%9B%E7%9A%84%E6%A8%A1%E5%9D%97%E3%80%82%E6%82%A8%E5%8F%AF%E4%BB%A5%E4%BB%85%E6%8C%87%E5%AE%9A%E6%A8%A1%E5%9D%97%E5%90%8D%E7%A7%B0%EF%BC%8C%E6%88%96%E5%90%8D%E7%A7%B0%E5%8A%A0%E7%89%88%E6%9C%AC%EF%BC%88%E7%94%A8%60@%60%E5%88%86%E9%9A%94%EF%BC%89%E3%80%82%E6%82%A8%E8%BF%98%E5%8F%AF%E4%BB%A5%E6%8C%87%E5%AE%9A%E8%A6%81%E6%9E%84%E5%BB%BA%E7%9A%84Caddy%E7%9A%84%E7%89%B9%E5%AE%9A%E7%89%88%E6%9C%AC%EF%BC%88%E5%8F%AF%E4%BB%A5%E6%98%AF%E7%89%88%E6%9C%AC%E6%A0%87%E7%AD%BE%E6%88%96%E6%8F%90%E4%BA%A4%E5%93%88%E5%B8%8C%EF%BC%89%E3%80%82%E6%9C%89%E5%85%B3https://github.com/caddyserver/xcaddy#command-usage%E7%9A%84%E6%9B%B4%E5%A4%9A%E4%BF%A1%E6%81%AF%E3%80%82
注意,"标准"Caddy模块(https://github.com/caddyserver/caddy/tree/master/modules/standard%EF%BC%89%E5%A7%8B%E7%BB%88%E5%8C%85%E5%90%AB%E5%9C%A8%E5%86%85%E3%80%82
更改配置时,Caddy不需要完全重启。Caddy提供caddy reload命令,可用于零停机时间重新加载配置。
在Docker中运行Caddy时,触发配置重载的推荐方法是在运行的容器中执行caddy reload命令。
首先,您需要确定容器ID或名称。然后,将容器ID传递给docker exec。工作目录设置为/etc/caddy,以便Caddy无需额外参数即可找到您的Caddyfile。
console$ caddy_container_id=$(docker ps | grep caddy | awk '{print $1;}') $ docker exec -w /etc/caddy $caddy_container_id caddy reload
Caddy默认启用HTTP/3支持。为提高此基于UDP的协议性能,底层的quic-go库会尝试增加其套接字的缓冲区大小。NET_ADMIN capability允许它覆盖操作系统的低默认限制,而无需通过sysctl更改内核参数。
为容器提供此capability是可选的,虽然不太可能,但可能存在安全隐患。
更多详情参见https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes%E3%80%82
如果您更喜欢使用docker compose运行服务栈,以下是一个示例服务定义,位于名为compose.yaml的文件中。该配置假设您已按照上文所述将自定义Caddyfile放入$PWD/conf。
yamlservices: caddy: image: amd64/caddy:<version> restart: unless-stopped cap_add: - NET_ADMIN ports: - "80:80" - "443:443" - "443:443/udp" volumes: - $PWD/conf:/etc/caddy - $PWD/site:/srv - caddy_data:/data - caddy_config:/config volumes: caddy_data: caddy_config:
然后可通过docker compose exec -w /etc/caddy caddy caddy reload进行平滑重载。
amd64/caddy镜像有多种变体,每种设计用于特定用例。
amd64/caddy:<version>这是默认镜像。如果您不确定自己的需求,可能需要使用此镜像。它既设计为临时容器(挂载源代码并启动容器以启动应用),也可用作构建其他镜像的基础。
amd64/caddy:<version>-alpine此镜像基于流行的Alpine Linux项目,可在https://hub.docker.com/_/alpine%E4%B8%AD%E8%8E%B7%E5%8F%96%E3%80%82Alpine Linux比大多数发行版基础镜像小得多(约5MB),因此通常会生成更精简的镜像。
当最终镜像大小尽可能小是您的主要关注点时,此变体非常有用。需要注意的主要问题是它使用musl libc而非glibc及相关库,因此软件可能会因libc要求/假设的深度而遇到问题。参见此Hacker News评论线程,了解可能出现的问题以及使用Alpine-based镜像的优缺点比较。
为最小化镜像大小,Alpine-based镜像中通常不包含其他相关工具(如git或bash)。以此镜像为基础,可在您自己的Dockerfile中添加所需工具(如果不熟悉如何安装包,请参见https://hub.docker.com/_/alpine/%E4%B8%AD%E7%9A%84%E7%A4%BA%E4%BE%8B%EF%BC%89%E3%80%82
查看此镜像中包含的软件的https://github.com/caddyserver/caddy/blob/master/LICENSE%E3%80%82
与所有Docker镜像一样,这些镜像可能还包含其他软件,这些软件可能受其他许可证约束(如基础发行版中的Bash等,以及主要软件的任何直接或间接依赖项)。
一些能够自动检测到的其他许可证信息可能位于https://github.com/docker-library/repo-info/tree/master/repos/caddy%E4%B8%AD%E3%80%82
对于任何预构建镜像的使用,镜像用户有责任确保对该镜像的任何使用符合其中包含的所有软件的相关许可证。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务