You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ktor-Docker生成的容器中安装FFmpeg?

解决Ktor容器中安装FFmpeg的问题

为什么在cloud-run.yml脚本中安装FFmpeg无效?

你在cloud-run.yml的script里执行FFmpeg安装命令,是在CI/CD运行器的容器(google/cloud-sdk:alpine)中完成的,而非你部署到Cloud Run的后端应用容器。因此FFmpeg只会被安装在CI运行环境中,不会出现在最终的后端镜像里。

正确解决方案:在Docker镜像构建阶段安装FFmpeg

要让FFmpeg出现在后端容器中,必须在构建Docker镜像时将其安装进去,具体步骤如下:

1. 自定义Ktor的Dockerfile模板

Ktor Docker插件支持使用自定义模板生成Dockerfile,你可以通过模板添加FFmpeg的安装命令:

  • 在项目中创建模板文件,例如src/main/docker/Dockerfile.template
  • 根据你使用的基础镜像类型选择对应内容:

Debian基础镜像(默认的eclipse-temurin:17-jre-jammy)

FROM eclipse-temurin:17-jre-jammy
WORKDIR /app
# 安装FFmpeg并清理缓存减小镜像体积
RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg && rm -rf /var/lib/apt/lists/*
COPY build/libs/*.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]

Alpine基础镜像(更小体积,需修改Ktor配置指定)

FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
# 安装FFmpeg
RUN apk update && apk add --no-cache ffmpeg
COPY build/libs/*.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]

2. 更新Ktor Gradle配置

在ktor.docker块中添加配置,指定使用自定义模板:

ktor {
    docker {
        jreVersion.set(JavaVersion.VERSION_17)
        localImageName.set("backend")
        if (apiTagName != null) imageTag.set(apiTagName)
        // 指定自定义Dockerfile模板路径
        dockerfileTemplate.set(file("src/main/docker/Dockerfile.template"))
        // 若选择Alpine基础镜像,需添加以下配置
        // jreImage.set("eclipse-temurin:17-jre-alpine")
        externalRegistry.set(
            DockerImageRegistry.googleContainerRegistry(
                provider { System.getenv("GCP_PROJECT") ?: "v3" },
                provider { "v2" },
                providers.environmentVariable("GCR_USERNAME"),
                providers.environmentVariable("GCR_PASSWORD"),
            )
        )
    }
}

3. 重新构建镜像并部署

  • 运行Gradle命令构建包含FFmpeg的镜像:
    ./gradlew dockerBuildImage
    
  • 插件会自动将镜像推送到GCR(已配置的情况下)
  • 执行原有的Cloud Run部署脚本即可,此时后端容器中会包含FFmpeg,路径为/usr/bin/ffmpeg

本地验证方法

构建镜像后,可通过以下命令确认FFmpeg是否存在:

docker run --rm backend ffmpeg -version

内容的提问来源于stack exchange,提问作者LornMalvo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:27:09