【问题标题】:Python libraries missing in docker container after they were installed on img build在 img build 上安装后,docker 容器中缺少 Python 库
【发布时间】:2018-11-24 12:04:01
【问题描述】:

我正在使用一些 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

有趣的是,在构建时运行的same“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

任何帮助表示赞赏, 谢谢!

【问题讨论】:

  • 我成功运行了您的 dockerfile(除了带有 jar 文件的部分)并且 pip list 工作得很好,为我提供了包括 googleads 及其依赖项在内的库列表。你如何进入容器检查pip list
  • 哇,我现在更困惑了。我刚刚将它添加到帖子中,让我知道您的想法。
  • 您可以尝试将命令从默认覆盖到 bash 吗?喜欢这个docker run -ti --rm my-server bash。如果它仍然不起作用,请尝试从 dockerfile 中删除 COPY target/my-server-1.0-SNAPSHOT.jar $PROJECT_HOME/my-server-1.0-SNAPSHOT.jar,重建它并使用覆盖的命令再次运行。因此它应该与我的本地 dockerfile 相同
  • 你是如何启动容器的?就凭docker-compose up -d?您是否在尝试使用 docker-compose build 之间重建它?
  • 你在 mac OS 上运行吗?如果是这样,那么这个主题可以帮助github.com/docker/docker-credential-helpers/issues/82

标签: python docker pip docker-compose docker-for-mac


【解决方案1】:

感谢@AndreyBondar,它有效!

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

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

【讨论】:

    猜你喜欢
    • 2018-04-28
    • 1970-01-01
    • 2019-10-28
    • 2023-01-18
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多