在img build上安装后,docker容器中缺少Python库

时间:2018-06-14 16:28:53

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

我正在用一些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列表返回的大列表...,当我启动容器时,我没有看到任何安装了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”命令会返回整个lib列表,但是在容器内部,只有少数...

更新1 事实证明,如果我手动启动容器,我确实会看到所有的库,但我已经(并且我必须)使用docker-compose启动容器。不知怎的,当我这样做时,我没有看到所有的lib,这是我的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 个答案:

答案 0 :(得分:1)

谢谢@AndreyBondar,它有效!

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

所以取消选中"安全存储Docker登录到macOs keychain"现在可以使用docker设置中的选项,并且使用docker-compose完美构建图像。