在node:16.3.0-alpine镜像中安装yt-dlp失败求助
问题描述
我的Dockerfile内容如下:
FROM node:16.3.0-alpine WORKDIR /home/node/app RUN apk update RUN apk upgrade RUN apk add --no-cache ffmpeg RUN apk add --no-cache python3 RUN apk add --no-cache yt-dlp
执行构建时,安装yt-dlp步骤失败,报错信息:
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz ERROR: unable to select packages: yt-dlp (no such package): required by: world[yt-dlp] The command '/bin/sh -c apk add --no-cache yt-dlp' returned a non-zero code: 1
我确认yt-dlp存在于Alpine的community仓库,但使用的node镜像默认已经启用该仓库,却找不到这个包。另外我必须使用Node.js 16版本的基础镜像,因为要运行的Wiki.js最新稳定版依赖Node.js 16。
解决方案
问题根源在于node:16.3.0-alpine对应的是Alpine 3.13版本,而yt-dlp是从Alpine 3.16版本才开始加入community仓库的,所以在Alpine 3.13的软件源里根本找不到这个包。
你有两种可行的解决方式:
方式一:更换对应更高版本Alpine的Node.js 16镜像
选择一个基于Alpine 3.16或更高版本的Node.js 16镜像,比如:
node:16-alpine(会自动使用Node.js 16分支下最新的Alpine版本)- 或者指定具体版本如
node:16.20.2-alpine3.18
修改后的Dockerfile开头:
FROM node:16-alpine
之后的apk安装命令无需改动,就能正常找到yt-dlp包。
方式二:通过pip安装yt-dlp(保留原node镜像)
如果必须使用node:16.3.0-alpine,可以利用已安装的python3,通过pip来安装yt-dlp:
把原来的apk add --no-cache yt-dlp替换成:
RUN apk add --no-cache py3-pip && pip install yt-dlp
这样就能绕开apk源的限制,成功安装yt-dlp。
内容的提问来源于stack exchange,提问作者GhostOrder
相关产品推荐
相关产品推荐

