以下是满足需求的 Dockerfile 示例:
dockerfile
#复制
# 第一阶段:从 cloudflared 镜像获取二进制文件
FROM cloudflare/cloudflared:2025.4.0 as cloudflared
# 第二阶段:基于 uptime-kuma 镜像构建
FROM louislam/uptime-kuma:2.0.0-beta.2
# 从第一阶段复制 cloudflared 二进制文件到目标路径
COPY --from=cloudflared /usr/local/bin/cloudflared /usr/local/bin/cloudflared
# 确保二进制文件具有可执行权限(部分镜像可能需要显式设置)
RUN chmod +x /usr/local/bin/cloudflared
关键指令说明:
- 多阶段构建 :通过
FROM ... as <alias>
定义第一阶段,专门用于提取cloudflared
文件,避免将整个中间镜像层带入最终镜像 - COPY --from :使用
--from=cloudflared
参数从指定构建阶段复制文件到当前镜像,这是 Docker 多阶段构建的核心特性 - 权限设置 :通过
RUN chmod
确保二进制文件具有可执行权限(尽管源镜像可能已设置,但显式声明更可靠)
扩展说明:
- 该 Dockerfile 最终镜像会保留
louislam/uptime-kuma:2.0.0-beta.2
的所有原有功能 - 通过多阶段构建,最终镜像不会包含
cloudflared
镜像的无关内容,优化了镜像体积 - 如果目标路径
/usr/local/bin
不存在,COPY
指令会自动创建目录(Docker 17.09+ 支持)
构建命令:
bash
docker build -t uptime-kuma:2.0.0-beta.2-cloudflared-2025.4.0 .
验证方法:
bash
docker run --rm -it uptime-kuma:2.0.0-beta.2-cloudflared-2025.4.0 /usr/local/bin/cloudflared -v
# 应显示文件存在且具有可执行权限(-rwxr-xr-x)
已经制作好镜像了,可以直接下载
bash
docker pull docker.cnb.cool/masx200/docker_mirror/uptime-kuma:2.0.0-beta.2-cloudflared-2025.4.0