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

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"]

问题截图:曲目时长显示00:00并自动跳过

解决方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:42:41