【发布时间】:2018-06-17 14:36:35
【问题描述】:
我正在尝试使用 python 3 和 virtualenv 构建一个 docker 映像。 我知道我不需要在 docker 映像中使用 wirtualenv,因为我将只使用 python 3,但无论如何我都看到了使用 virtualenv 的一些干净的隔离优势。
最佳做法是什么?我应该避免在 docker 上使用 virtualenv 吗? 如果是这种情况,我该如何设置 python3 和 pip3 用作 python 和 pip(没有 3)?
这是我的 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
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 ads
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"]
谢谢
=== 更新 1 === 我正在尝试在 WORKDIR 中创建一个新的虚拟环境,安装一些库,然后执行一个 shell 脚本,即使我在构建映像时看到它创建了整个东西,但在运行容器时环境文件夹是空的。
这是来自我的 Dockerfile:
RUN virtualenv ./env && source ./env/bin/activate && pip install jep \
googleads gspread oauth2client
ENTRYPOINT ["/bin/bash", "./startup.sh"]
startup.sh:
#!/bin/sh
source ./env/bin/activate
java -Dspring.data.mongodb.uri=mongodb://my-mongo:27017/mydb -jar ./my-server-1.0-SNAPSHOT.jar
它构建得很好,但是在 docker-compose up -d 这是输出:
./startup.sh: source: line 2: can't open './env/bin/activate'
env 文件夹存在,但它为空。
有什么想法吗?
谢谢!
=== 更新 2 === 这是工作配置:
RUN virtualenv ./my-env && source ./my-env/bin/activate \
&& pip install gspread==0.6.2 jep oauth2client googleads pandas
CMD ["/bin/bash", "-c", "./startup.sh"]
这是startup.sh:
#!/bin/sh
source ./my-env/bin/activate
java -Dspring.data.mongodb.uri=mongodb://my-mongo:27017/mydb -jar ./my-server-1.0-SNAPSHOT.jar
【问题讨论】:
-
编辑
PATH变量以包含python3安装的位置,然后将python3和pip3分别符号链接到python和pip。
标签: python-3.x docker pip virtualenv