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

Dockerfile未完整复制文件致discord.py bot容器启动失败求助

问题:Docker运行discord.py机器人提示模块缺失,文件复制异常

问题详情

尝试在Docker容器中运行discord.py机器人,执行sudo docker compose up后Docker提示“缺少模块”。排查发现Dockerfile未正确复制源代码的文件夹结构,镜像内仅存在bot文件夹内的文件,而非完整的bot文件夹,导致Python无法识别模块;同时容器内未安装机器人所需的依赖包。代码在容器外运行正常,排除机器人代码本身问题。

本地目录结构:

  • 根目录包含bot文件夹、docker-compose.yml、.env文件
  • bot文件夹内为机器人代码文件(需包含__init__.py以被识别为Python模块)

现有配置文件

docker-compose.yml

version: '3'

services:
  bot:
    build: .
    restart: always
    volumes:
      - ./.env:/usr/src/app/.env

Dockerfile

FROM python:bullseye

WORKDIR /usr/app/src

COPY bot bot

CMD ["python", "-m", "bot"]

解决方案

1. 修复Dockerfile的文件复制与依赖安装逻辑

修改COPY指令确保本地bot文件夹完整复制到容器内,同时添加依赖安装步骤(需确保本地根目录存在requirements.txt,列出discord.py等依赖包):

修改后的Dockerfile:

FROM python:bullseye

WORKDIR /usr/app/src

# 将本地bot文件夹完整复制到容器当前工作目录下的bot文件夹
COPY ./bot ./bot

# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

CMD ["python", "-m", "bot"]

2. 补充requirements.txt(若未存在)

在本地根目录创建requirements.txt,添加机器人所需依赖,例如:

discord.py>=2.3.2
python-dotenv>=1.0.0

3. 修正.env文件挂载路径

原docker-compose.yml中挂载.env的目标路径与Dockerfile的工作目录不匹配,会导致机器人无法读取环境变量,修改为:

version: '3'

services:
  bot:
    build: .
    restart: always
    volumes:
      - ./.env:/usr/app/src/.env

验证步骤

  1. 执行sudo docker compose build重新构建镜像
  2. 执行sudo docker compose up启动容器
  3. 若需确认镜像内文件结构,可执行sudo docker run --rm -it <镜像名> ls /usr/app/src,检查bot文件夹是否存在

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:42:24