构建镜像时安装了Python库,但在Docker容器中缺少这些库

3
我正在使用一些Python包构建一个镜像,这是我的Dockerfile:
FROM openjdk:8-alpine

RUN apk update && apk add bash gcc musl-dev
RUN apk add python3 python3-dev
RUN apk add py3-pip
RUN apk add libxslt-dev libxml2-dev

ENV PROJECT_HOME /opt/app

RUN mkdir -p /opt/app
RUN mkdir -p /opt/app/modules

# This is needed for Jep, otherwise it doesn't run
ENV LD_LIBRARY_PATH /usr/lib/python3.6/site-packages/jep
ENV LD_PRELOAD /usr/lib/libpython3.6m.so

RUN pip3 install jep
RUN pip3 install googleads
RUN pip3 install gspread
RUN pip3 list

COPY target/my-server-1.0-SNAPSHOT.jar $PROJECT_HOME/my-server-1.0-SNAPSHOT.jar

WORKDIR $PROJECT_HOME

CMD ["java", "-Dspring.data.mongodb.uri=mongodb://my-mongo:27017/mydb","-jar","./my-server-1.0-SNAPSHOT.jar"]

现在,尽管我在构建时看到了已安装的软件包(并且pip3 list返回了一个很长的列表...),但是当我启动容器时,我没有看到任何在jep之外安装的软件包。
/opt/app # pip3 list
jep (3.7.1)
pip (9.0.1)
setuptools (28.8.0)
/opt/app #

这是我正在构建图像的方法:
docker build -t my-server .

这是我检查安装的库的方法:
bash -c "clear && docker exec -it my-server sh"

pip3 list

有趣的是,“pip3 list”命令在构建时返回整个库列表,但在容器内部只返回其中一些...
更新1:事实证明,如果我手动启动容器,我确实可以看到所有的库,但我一直在使用docker-compose启动容器。不知何故,当我这样做时,我看不到所有的库,这是我为该镜像配置的docker-compose配置:
services:
  my-server:
    build: .
    restart: always
    container_name: my-server
    ports:
      - 8200:8200
    working_dir: /opt/app
    volumes:
      - $HOME/data/Modules:/opt/app/modules
    depends_on:
      - mongo

任何帮助都是感激的,谢谢!

1
我已经成功运行了你的Dockerfile(除了jar文件那一部分),pip列表正常工作并给出了包括googleads及其依赖项在内的库列表。你是如何进入容器检查pip list的? - Andrey Bondar
尝试从Compose文件中删除卷 - 可能存在某些问题,尽管我目前无法复制它。 - Andrey Bondar
已将构建更改为镜像:my-server,看起来可以工作。仍在检查中。 - magnoz
2
你是如何启动容器的?只是通过 docker-compose up -d 吗?在尝试过程中是否使用 docker-compose build 重新构建了它? - Andrey Bondar
1
你正在使用Mac OS吗?如果是的话,这个主题可能会有所帮助 https://github.com/docker/docker-credential-helpers/issues/82 - Andrey Bondar
显示剩余5条评论
1个回答

1

感谢 @AndreyBondar,它有效了!

我正在使用docker构建图像,并使用docker-compose运行它,但是docker-compose也在尝试构建它,但由于OSX身份验证问题而无法构建,因此似乎它正在运行先前版本的没有库的图像(不是100%,但看起来是这样)。

所以现在从docker设置中取消选中“在macOS钥匙串中安全地存储Docker登录信息”选项,现在它可以正常工作,并且使用docker-compose完美地构建图像。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接