Dockerfile部署Discord bot无法复制requirements.txt及端口配置问题
问题修复方案
一、requirements.txt复制失败解决
核心原因是你使用的docker build -t sinless777/helix_bot - < Dockerfile命令通过标准输入读取Dockerfile,该模式下不会将当前目录作为构建上下文传递给Docker服务,因此无法找到本地的requirements.txt文件。
修复步骤:
- 替换构建命令,直接指定当前目录为构建上下文,在I:\HELIX\Modules\Discord\Helix目录下执行:
docker build -t sinless777/helix_bot . - 若替换命令后仍提示找不到文件,检查同目录下的
.dockerignore文件,确认没有将requirements.txt或者*.txt规则加入忽略列表。 - 优化Dockerfile冗余逻辑,你当前的Dockerfile重复执行了两次
pip install -r requirements.txt,且系统依赖安装顺序放在了Python依赖安装之后,可能导致pyaudio安装失败,调整后的Dockerfile参考如下:
FROM python:3 WORKDIR /Helix # 优先安装系统级依赖 RUN apt-get update \ && apt-get install libasound-dev libportaudio2 libportaudiocpp0 portaudio19-dev -y # 复制依赖声明文件安装Python依赖 COPY requirements.txt ./ RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -r requirements.txt && \ pip install pyaudio # 复制全部项目文件 COPY . . # 容器端口声明 EXPOSE 3306 443 50 # 启动命令 CMD ["python", "bot.py"]
二、端口暴露规则正确配置
你原Dockerfile中EXPOSE 3306:3306的写法是错误的:
EXPOSE是容器层面的声明,仅用来标注容器内服务会监听哪些端口,不需要指定宿主机映射端口,多个端口用空格分隔即可,正确写法为EXPOSE 3306 443 50- 端口映射(容器端口和宿主机端口绑定)是容器启动时通过
-p参数指定,示例启动命令如下:docker run -d -p 3306:3306 -p 443:443 -p 50:50 sinless777/helix_bot
内容的提问来源于stack exchange,提问作者Tim Pierce
相关产品推荐
相关产品推荐

