Docker容器内requirements.txt依赖包未成功安装问题咨询
问题根因
依赖安装失败是多个配置错误共同导致的:
- 镜像标签冲突:你在compose中同时配置了
build: .和官方镜像地址image: jupyter/datascience-notebook:r-4.0.3,Docker会将本地构建完成的镜像直接打上官方镜像的标签,实际启动时会优先使用拉取到的无依赖官方镜像,Dockerfile里写的安装步骤不会在运行的容器里生效。 - Dockerfile路径错误:jupyter系列镜像默认工作目录是
/home/jovyan,你在Dockerfile中写的COPY setup.py /work是将文件复制到容器根目录下的/work绝对路径,后续执行pip install -r ./work/requirements.txt时,会在当前工作目录(/home/jovyan)下找work/requirements.txt,和你复制文件的路径不匹配,安装步骤实际执行时找不到文件,没有完成依赖安装。 - 构建触发逻辑问题:新增
build: .配置后,直接执行docker compose up -d不会自动重新构建已存在的镜像,修改Dockerfile后需要主动加构建参数才会触发新镜像构建。 - 基础镜像不匹配:Dockerfile使用的基础镜像
jupyter/scipy-notebook和compose中指定的jupyter/datascience-notebook:r-4.0.3不一致,本身存在版本 mismatch 问题。
修复方案
1. 修正Dockerfile配置
对齐基础镜像版本,修正文件路径,处理权限问题:
FROM jupyter/datascience-notebook:r-4.0.3 USER root WORKDIR /home/jovyan/work # 优先复制依赖声明文件,复用Docker构建缓存,后续改代码不用重装依赖 COPY requirements.txt setup.py ./ RUN pip install --upgrade pip && \ pip install -e . && \ pip install --no-cache-dir -r requirements.txt # 复制剩余项目代码 COPY . . # 切回jupyter默认运行用户,避免文件权限异常 USER jovyan
2. 修正docker-compose.yml配置
去掉和官方镜像重名的标签配置,清理重复挂载项:
version: '3.7' networks: ling172: services: jupyter: build: . # 给自定义镜像设置独立标签,避免覆盖官方镜像 image: almond-analysis:dev environment: - JUPYTER_TOKEN=password - JUPYTER_ENABLE_LAB=yes volumes: # 移除重复的子目录挂载,仅保留项目根目录挂载即可 - .:/home/jovyan/work ports: - 7777:8888 container_name: almond_analysis networks: - ling172
3. 重新构建启动
停掉旧容器,强制重新构建镜像后启动:
docker compose down docker compose up -d --build
启动完成后可以进入容器执行pip show openpyxl验证,返回3.0.10版本信息即说明依赖安装成功,打开notebook即可正常使用。
内容的提问来源于stack exchange,提问作者JohnK
相关产品推荐
相关产品推荐

