Python 库在安装到 img build 后在 docker 容器中丢失
Python libraries missing in docker container after they were installed on img build
我正在用一些 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 列出的是一个很大的列表 returns...,当我启动容器时,我没有在上面看到任何从 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" 命令 运行 在构建时 returns 整个库列表,但在容器,只是其中的几个...
更新 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
感谢任何帮助,
谢谢!
谢谢@AndreyBondar,成功了!
我用 docker 和 运行 构建图像 docker-compose 谁也试图构建它但它不能因为那个 OSX 身份验证问题,因此它似乎是 运行 没有库的图像的先前版本(不是 100%,但它看起来就是这样)。
因此取消选中 docker 设置中的 "Securely store Docker logins in macOs keychain" 选项,现在可以使用了,并且图像可以使用 docker-compose 完美构建。
我正在用一些 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 列出的是一个很大的列表 returns...,当我启动容器时,我没有在上面看到任何从 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" 命令 运行 在构建时 returns 整个库列表,但在容器,只是其中的几个...
更新 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
感谢任何帮助, 谢谢!
谢谢@AndreyBondar,成功了!
我用 docker 和 运行 构建图像 docker-compose 谁也试图构建它但它不能因为那个 OSX 身份验证问题,因此它似乎是 运行 没有库的图像的先前版本(不是 100%,但它看起来就是这样)。
因此取消选中 docker 设置中的 "Securely store Docker logins in macOs keychain" 选项,现在可以使用了,并且图像可以使用 docker-compose 完美构建。