如何在docker内部安装ffmpeg
在 Docker 内部安装 ffmpeg,取决于你是想在现有的运行容器中临时安装,还是想一劳永逸地写入 Dockerfile 重新构建。
以下是针对不同主流基础镜像(Ubuntu/Debian 和 Alpine)的具体操作方法:
方案一:修改 Dockerfile(推荐,一劳永逸)
这是最正规的做法。在你的 Dockerfile 中,根据你使用的基础镜像类型,添加对应的安装命令。
- 如果你的镜像基于 Ubuntu / Debian / Python (默认)
绝大多数 Python 镜像(如 python:3.12)都是基于 Debian 的。
在 Dockerfile 中加入以下代码:
Dockerfile
更新软件源并安装 ffmpeg
RUN apt-get update && \
apt-get install -y ffmpeg && \
rm -rf /var/lib/apt/lists/*
💡 提示: rm -rf /var/lib/apt/lists/* 是为了清理缓存,让你的 Docker 镜像体积更小。
- 如果你的镜像基于 Alpine
Alpine 镜像非常轻量,很多精简版镜像会使用它(比如 python:3.12-alpine)。
在 Dockerfile 中加入:
Dockerfile
Alpine 使用 apk 作为包管理器
RUN apk update && \
apk add --no-cache ffmpeg
修改完 Dockerfile 后,记得在终端运行以下命令重新构建镜像:
Bash
docker build -t my-app:latest .
方案二:进入正在运行的容器中手动安装(临时有效)
如果你不想重新构建镜像,只是想临时进容器让程序跑起来,可以直接进去安装。但请注意:一旦容器被销毁(docker rm),安装的 ffmpeg 就会消失。
- 进入容器内部
首先,通过 docker ps 找到你容器的 CONTAINER ID 或 NAMES,然后运行:
Bash
假设你的容器名字叫 my_tiktok_app
docker exec -it my_tiktok_app /bin/bash
(如果报错说找不到 bash,就把最后面的 /bin/bash 换成 /bin/sh)
- 在容器内执行安装命令
进入容器的终端后,根据系统类型执行:
如果是 Debian/Ubuntu 系统:
Bash
apt-get update && apt-get install -y ffmpeg
如果是 Alpine 系统:
Bash
apk add --no-cache ffmpeg
安装完成后,输入 exit 退出容器。此时你的 Python 脚本应该就能正常检测到 ffmpeg 并开始下载直播了。
方案三:如果你是用 Docker Compose 启动的
如果你是用 docker-compose.yml 启动的项目,且该项目支持通过环境变量或配置进行构建,你可以查看项目的 docker-compose.yml。
如果它使用的是 image: xxx(直接拉取镜像),你可能需要将 image 改为 build 模式,指向你修改后的 Dockerfile:
YAML
version: '3'
services:
downloader:
build: . # 指向本地包含修改后 Dockerfile 的目录
volumes:
- .:/app
验证安装是否成功
无论用哪种方法,安装完成后你可以在容器内运行以下命令验证:
Bash
docker exec -it <你的容器名> ffmpeg -version
如果打印出了 ffmpeg version x.x.x 的版本信息,就说明大功告成了!