本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
注意:这是caddy官方镜像的arm64v8架构专用仓库——更多信息请参见官方镜像文档中的“非amd64架构?”以及官方镜像FAQ中的“镜像源在Git中已更改,该怎么办?”。
维护者:
Caddy Docker维护团队
获取帮助:
Caddy社区论坛
Dockerfile链接(参见FAQ中的“‘Shared’和‘Simple’标签有什么区别?”)
2.10.2-alpine, 2.10-alpine, 2-alpine, alpine
2.10.2-builder-alpine, 2.10-builder-alpine, 2-builder-alpine, builder-alpine
2.10.2, 2.10, 2, latest:
2.10.2-alpine2.10.2-builder, 2.10-builder, 2-builder, builder:
2.10.2-builder-alpine问题反馈地址:
[***]
支持的架构:(更多信息)
amd64, arm32v6, arm32v7, arm64v8, ppc64le, riscv64, s390x, windows-amd64
镜像 artifact 详情:
repo-info 仓库的 repos/caddy/ 目录 (历史记录)
(镜像元数据、传输大小等)
镜像更新:
official-images 仓库的 library/caddy 标签
official-images 仓库的 library/caddy 文件 (历史记录)
本描述的来源:
docs 仓库的 caddy/ 目录 (历史记录)
!logo
Caddy 2 是一款功能强大、企业级的开源Web服务器,支持自动HTTPS,采用Go语言编写。
Caddy 需要对两个位置具有写权限:数据目录和配置目录。虽然不必持久化配置目录中的文件(但可能会方便),但持久化数据目录非常重要。
文档中说明:
数据目录不得视为缓存。其内容并非临时文件或仅为性能而存在。Caddy 将TLS证书、私钥、OCSP staples和其他必要信息存储在数据目录中。未经了解相关影响,不应删除其中内容。
本镜像提供两个卷挂载点:/data 和 /config。
在以下示例中,命名卷 caddy_data 挂载到 /data,以实现数据持久化。
注意,命名卷会在容器重启和终止后保留,因此当迁移到新版本镜像时,可以重用相同的数据和配置目录。
默认配置文件仅从 /usr/share/caddy 提供文件,因此如果要从当前工作目录提供 index.html:
$ echo "hello world" > index.html $ docker run -d -p 80:80 \ -v $PWD/index.html:/usr/share/caddy/index.html \ -v caddy_data:/data \ arm64v8/caddy ... $ curl http://localhost/ hello world
要覆盖默认的 Caddyfile,可以在 $PWD/conf 子文件夹中创建 Caddyfile,并将该文件夹挂载到 /etc/caddy:
$ docker run -d -p 80:80 \ -v $PWD/conf:/etc/caddy \ -v caddy_data:/data \ arm64v8/caddy
/etc/caddy/Caddyfile如果使用 vim 或其他会更改编辑文件 inode 的编辑器,只有在重新创建容器时,更改才会在容器内生效,详情可参考这篇 Medium 文章。使用此类编辑器时,Caddy 的优雅重载功能可能无法按预期工作,如 此 issue 中所述。
默认 Caddyfile 仅监听 80 端口,未设置自动 TLS。但是,如果您的站点有域名,且其 A/AAAA DNS 记录已正确指向该机器的公网 IP,则可以使用以下命令通过 HTTPS 提供站点服务:
$ 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 \ arm64v8/caddy caddy file-server --domain example.com
关键在于 Caddy 能够监听 80 和 443 端口,这两个端口都是 ACME HTTP 挑战所必需的。
有关自动 HTTPS 支持的更多信息,请参见 Caddy 文档!
大多数部署生产站点的用户不希望依赖将文件挂载到容器中,而是基于 arm64v8/caddy 构建自己的镜像:
# 注意:在生产站点中切勿使用 :latest 标签 FROM arm64v8/caddy:<version> COPY Caddyfile /etc/caddy/Caddyfile COPY site /srv
Caddy 可通过“模块”进行扩展。详见 [***] Caddy 官网下载页面 找到可用模块列表。
您可以使用 :builder 镜像作为构建新 Caddy 二进制文件的快捷方式:
FROM arm64v8/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 arm64v8/caddy:<version> COPY --from=builder /usr/bin/caddy /usr/bin/caddy
注意第二个 FROM 指令——通过将新构建的二进制文件叠加到常规 arm64v8/caddy 镜像上,可生成更小的镜像。
xcaddy 工具用于 构建新的 Caddy 入口点,包含指定的模块。您可以仅指定模块名称,或名称加版本(用 @ 分隔)。也可以指定要构建的 Caddy 特定版本(可以是版本标签或提交哈希)。更多 xcaddy 用法。
注意,“标准”Caddy 模块 (github.com/caddyserver/caddy/master/modules/standard) 始终包含在内。
更改配置时,Caddy 不需要完全重启。Caddy 提供 caddy reload 命令,可用于零停机时间重载配置。
在 Docker 中运行 Caddy 时,触发配置重载的推荐方法是在运行的容器中执行 caddy reload 命令。
首先,您需要确定容器 ID 或名称。然后,将容器 ID 传递给 docker exec。工作目录设置为 /etc/caddy,因此 Caddy 无需额外参数即可找到您的 Caddyfile。
$ 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 库会尝试增加其 socket 的缓冲区大小。NET_ADMIN capability 允许它覆盖操作系统的低默认限制,而无需通过 sysctl 更改内核参数。
为容器提供此 capability 是可选的,虽然可能性不大,但可能存在 安全隐患。
更多详情参见 [***]
如果您更喜欢使用 docker compose 运行服务栈,以下是示例服务定义(放在名为 compose.yaml 的文件中)。该配置假设您已按照 上文 所述在 $PWD/conf 中放置了自定义 Caddyfile。
services: caddy: image: arm64v8/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 执行优雅重载。
arm64v8/caddy 镜像有多种版本,每种版本针对特定用例设计。
arm64v8/caddy:<version>这是默认镜像。如果不确定需求,通常应使用此版本。它既可用作临时容器(挂载源代码并启动容器以运行应用),也可用作构建其他镜像的基础。
arm64v8/caddy:<version>-alpine此镜像基于流行的 Alpine Linux 项目,可在 alpine 官方镜像 中获取。Alpine Linux 比大多数发行版基础镜像小得多(约 5MB),因此通常会生成更精简的镜像。
当最终镜像大小尽可能小是首要考虑因素时,此变体非常有用。需要注意的是,它使用 musl libc 而非 glibc 等,因此软件可能会因对 libc 要求/假设的深度而遇到问题。有关可能出现的问题以及使用 Alpine 基础镜像的优缺点比较,参见 此 Hacker News 评论线程。
为最小化镜像大小,Alpine 基础镜像中通常不包含额外相关工具(如 git 或 bash)。以此镜像为基础,可在自己的 Dockerfile 中添加所需工具(如果不熟悉,参见 alpine 镜像描述 中的安装示例)。
查看此镜像包含软件的 许可信息。
与所有 Docker 镜像一样,这些镜像可能还包含其他软件,可能受其他许可协议约束(如基础发行版中的 Bash 等,以及主要软件的任何直接或间接依赖项)。
可能通过自动检测获得的其他许可信息可在 repo-info 仓库的 caddy/ 目录 中找到。
对于任何预构建镜像的使用,镜像用户有责任确保对本镜像的任何使用符合其中包含的所有软件的相关许可协议。
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429