Docker部署Discord.js+Distube音乐机器人时长显示00:00问题
问题描述
我用Distube和Discord.js开发了一款音乐机器人,在Powershell中运行时可正常播放音乐,但通过Docker构建镜像并部署容器后,机器人无法获取歌曲信息,曲目时长显示为00:00并自动跳过当前曲目。我尝试更换distube@3.3.4及更早版本,问题仍未解决。
相关配置文件
package.json
{ "name": "graffity", "version": "2.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js" }, "author": "Jamien#0378", "license": "ISC", "dependencies": { "@discordjs/opus": "^0.7.0", "@discordjs/voice": "^0.16.0", "@distube/soundcloud": "^1.3.2", "@distube/spotify": "^1.5.1", "@distube/yt-dlp": "^0.0.2", "@distube/ytdl-core": "^4.11.11", "@sapphire/utilities": "^3.12.0", "ascii-table": "^0.0.9", "colors": "^1.4.0", "common-tags": "^1.8.2", "cpu-stat": "^2.0.1", "discord.js": "^13.16.0", "distube": "^3.3.1", "eslint-config-prettier": "^8.8.0", "ffmpeg-static": "^4.4.1", "gradient-string": "^2.0.2", "libsodium-wrappers": "^0.7.11", "ms": "^2.1.3", "mysql": "^2.18.1", "os": "^0.1.2", "spotify-url-info": "^3.2.5" } }
Dockerfile
FROM node:alpine WORKDIR /usr/app/ COPY package*.js ./ COPY ./ ./ RUN apk add --update python3 make g++ && rm -rf /var/cache/apk/* RUN npm rebuild RUN npm install CMD ["node", "shard.js"]
问题截图:
解决方案
1. 修复Dockerfile依赖与配置错误
Alpine镜像默认缺少yt-dlp运行所需的系统依赖,且原Dockerfile存在package*.js的拼写错误(应为package*.json),修改后的Dockerfile如下:
FROM node:alpine WORKDIR /usr/app/ # 添加系统级依赖:ffmpeg用于媒体处理,ca-certificates用于HTTPS请求验证 RUN apk add --no-cache ffmpeg ca-certificates python3 make g++ && rm -rf /var/cache/apk/* COPY package*.json ./ RUN npm install COPY ./ ./ CMD ["node", "shard.js"]
2. 确保Distube的yt-dlp插件配置正确
在机器人代码中显式配置yt-dlp插件,保证能正常拉取歌曲信息:
const { DisTube } = require('distube'); const { YtDlpPlugin } = require('@distube/yt-dlp'); const distube = new DisTube(client, { plugins: [new YtDlpPlugin({ ytdlOptions: { quality: 'highestaudio', highWaterMark: 1 << 25, // 强制启用信息获取 getInfo: true } })] });
3. 验证容器网络连通性
确保Docker容器可正常访问外部网络(如YouTube、Spotify的API),若服务器有防火墙或代理,需配置容器的网络策略,允许出站HTTP/HTTPS请求。
4. 清理缓存重新构建镜像
执行以下命令清理旧缓存与镜像,重新构建部署:
docker system prune -a docker build -t music-bot . docker run music-bot
内容的提问来源于stack exchange,提问作者Kravon Lidan
相关产品推荐
相关产品推荐

