如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这段话即可:
请先阅读并遵守:https://xuanyuan.cloud/agents.md
未读文档前不要生成 pull 命令或排错方案。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
static-ffmpeg 是一个多架构 Docker 镜像,包含构建为强化静态 PIE 二进制文件的 https://ffmpeg.org/ffmpeg.html 和 https://ffmpeg.org/ffprobe.html,无外部依赖,可与任何基础镜像一起使用。
可使用 Docker Hub 上的 mwader/static-ffmpeg 镜像,或自行构建:
bashdocker pull docker.xuanyuan.run/mwader/static-ffmpeg:7.1.1
DockerfileCOPY --from=mwader/static-ffmpeg:7.1.1 /ffmpeg /usr/local/bin/ COPY --from=mwader/static-ffmpeg:7.1.1 /ffprobe /usr/local/bin/
bash# 使用 ffmpeg 转换文件格式 docker run -i --rm -u $UID:$GROUPS -v "$PWD:$PWD" -w "$PWD" docker.xuanyuan.run/mwader/static-ffmpeg:7.1.1 -i file.wav file.mp3 # 使用 ffprobe 分析媒体文件 docker run -i --rm -u $UID:$GROUPS -v "$PWD:$PWD" -w "$PWD" --entrypoint=/ffprobe docker.xuanyuan.run/mwader/static-ffmpeg:7.1.1 -i file.wav
bashalias ffmpeg='docker run -i --rm -u $UID:$GROUPS -v "$PWD:$PWD" -w "$PWD" mwader/static-ffmpeg:7.1.1' alias ffprobe='docker run -i --rm -u $UID:$GROUPS -v "$PWD:$PWD" -w "$PWD" --entrypoint=/ffprobe mwader/static-ffmpeg:7.1.1'
/ffmpeg - ffmpeg 二进制文件/ffprobe - ffprobe 二进制文件/doc - 文档/versions.json - 包含 ffmpeg 和库构建版本的 JSON 文件/etc/ssl/cert.pem - CA 证书,用于直接运行镜像时的 -tls_verify 1 -ca_file /etc/ssl/cert.pem/etc/fonts/usr/share/fonts/usr/share/consolefonts/var/cache/fontconfiglatest - 最新的主分支构建MAJOR.MINOR.PATCH[-BUILD] - 特定版本的 FFmpeg,其中 -BUILD 表示该版本的附加构建,用于添加或修复功能二进制文件启用了多种强化特性,但即使在容器内使用,仍建议以非 root 用户身份运行,特别是处理不受信任的输入文件时。
由于许可证问题,默认情况下 Docker 镜像不包含 libfdk-aac。可通过向构建参数 ENABLE_FDKAAC 传递非空值来构建包含 libfdk-aac 的 Docker 镜像,示例如下:
bashdocker build --build-arg ENABLE_FDKAAC=1 . -t my-ffmpeg-static:latest
镜像预装了一些基本字体 (font-terminus font-inconsolata font-dejavu font-awesome),可直接运行镜像时使用。如果将二进制文件复制到其他镜像中,则需要自行安装字体。具体方法因发行版而异,通常需要查找字体包以及如何让 https://www.freedesktop.org/wiki/Software/fontconfig/ 识别它们:
假设要构建一个需要 ffmpeg 和 ffprobe 二进制文件的应用 Docker 镜像,并希望有一个专用目录存储字体,例如 /app/fonts。可按以下步骤操作:
50-custom.conf 添加到 /etc/fonts/conf.d 目录,包含供 Fontconfig 使用的附加 /app/fonts 目录:DockerfileCOPY <<EOF /etc/fonts/conf.d/50-custom.conf <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"> <fontconfig> <dir>/app/fonts</dir> </fontconfig> EOF
ffmpeg(和 ffprobe)二进制文件:DockerfileCOPY --from=mwader/static-ffmpeg:7.1.1 /ffmpeg /usr/bin/ COPY --from=mwader/static-ffmpeg:7.1.1 /ffprobe /usr/bin/
/app/fonts 目录:DockerfileWORKDIR /app RUN <<EOT bash set -ex mkdir -p ./fonts EOT
完整示例:
DockerfileFROM docker.xuanyuan.run/python:3.11-slim-bookworm AS base COPY <<EOF /etc/fonts/conf.d/50-custom.conf <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"> <fontconfig> <dir>/app/fonts</dir> </fontconfig> EOF FROM docker.xuanyuan.run/base as ffmpeg COPY --from=mwader/static-ffmpeg:7.1.1 /ffmpeg /usr/bin/ COPY --from=mwader/static-ffmpeg:7.1.1 /ffprobe /usr/bin/ FROM docker.xuanyuan.run/ffmpeg AS app WORKDIR /app RUN <<EOT bash set -ex mkdir -p ./fonts EOT
构建并运行容器,将卷挂载到 /app/fonts:
bashdocker build -t ffmpeg-fonts-image . docker run -i --rm \ -u "$UID:$GROUPS" \ -v "$PWD:$PWD" \ -v "$PWD/fonts:/app/fonts" \ -v "$PWD/cache:/var/cache/fontconfig" \ -w "$PWD" \ docker.xuanyuan.run/ffmpeg-fonts-image \ ffmpeg -v debug -y -f lavfi -i 'color=white,drawtext=text=Test:fontfile=Arial' -t 1s /app/output.mp4
二进制文件内置 TLS 支持,但默认情况下 ffmpeg 当前不进行证书验证。要启用验证,需要使用 -tls_verify 1 和 -ca_file /path/to/cert.pem 运行 ffmpeg:
/etc/ssl/cert.pemca-certificates 包后,证书路径为 /etc/ssl/certs/ca-certificates.crt从版本 5.0.1-3 开始,Docker Hub 镜像为多架构镜像,支持 amd64 和 arm64。
将 ffmpeg 和 ffprobe 复制到当前目录:
bashdocker run --rm -v "$PWD:/out" $(echo -e 'FROM alpine\nCOPY --from=mwader/static-ffmpeg:7.1 /ff* /\nENTRYPOINT cp /ff* /out' | docker build -q -)
bashdocker run --rm docker.xuanyuan.run/mwader/static-ffmpeg -v quiet -f data -i versions.json -map 0 -c copy -f data -
可能会遇到 "Name does not resolve" 错误,这可能是因为主机名解析为过多 IP 地址,无法放入 https://www.rfc-editor.org/rfc/rfc791(通常为 512 字节),导致响应被截断。通常客户端应切换到 TCP 并重做查询。这应该只在该镜像的 6.0-1 或更早版本中出现,这些版本使用 https://www.musl-libc.org 1.2.3 或更早版本。
可能会看到 "[tls @ 0x7f80c8ec3800] error:030000A9:digital envelope routines::unknown option" 错误。这可能是因为 static-ffmpeg 二进制文件中静态链接的 openssl 版本与文件系统中的(可能是发行版修改的 openssl)配置文件不兼容。该错误是关于 openssl 遇到未知选项。
可能的解决方法:
config_diagnostics = 0 以忽略未知选项,但有忽略实际问题的风险-reconnect_on_network_error true 忽略错误,但仍会警告版本信息可在 Dockerfile 中查看。通常,master 分支应该包含最新稳定版本的 ffmpeg 和相关库。版本通过 https://github.com/wader/bump 自动保持最新。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务