【问题标题】:Creating docker image that executes commands in python virtualenv创建在 python virtualenv 中执行命令的 docker 映像
【发布时间】:2016-12-08 07:30:59
【问题描述】:

我有以下问题...

我想创建一个在其上创建 python 虚拟环境的 docker 映像。那么我希望能够做到以下两件事:

  • 运行docker run -it <image> 在此启动交互式shell 虚拟环境。
  • 运行docker run <image> <command>(如python --version)即 在所述虚拟环境中执行

我尝试了很多东西,但似乎我无处可去。我的 Dockerfile 目前看起来像这样:

FROM ubuntu:16.04
RUN apt-get -y update && apt-get install -y python3 python-pip
RUN pip install virtualenv
RUN virtualenv -p python3.5 /venvs/myenv3.5
RUN . /venvs/myenv3.5/bin/activate && pip install numpy

我尝试过使用 ENTRYPOINT 和 CMD,但我一无所获。通过添加以下行:CMD . /venvs/myenv3.5/bin/activate; /bin/bash; 我能够在环境中启动交互式 bash,但运行 docker run python --version 显示类似的命令不会在所述环境中执行。

有没有办法做到这一点?

【问题讨论】:

  • 这就是我现在的做法(不幸的是不是很优雅 xD):ENV PATH <path to venv bin>:$PATH 如果有人有更清洁的解决方案,请告诉我。

标签: python ubuntu docker virtualenv


【解决方案1】:

您可以使用/venvs/myenv3.5/bin/python 可执行文件代替主要的python。这将在该虚拟环境中执行python。您可以通过在 cmets 中提到的 ENV PATH /venvs/myenv3.5/bin:$PATH 或使用 Dockerfile 中的入口点来做到这一点:

ENTRYPOINT /venvs/myenv3.5/bin/python

现在,当您运行映像时,您的 virtualenv python 将默认执行:

$ docker run -it <image> --version
Python 3.5.2

如果你需要在这张图片上得到一个shell,你可以覆盖entrypont:

$ docker run -it --entrypoint /bin/bash <image>
/ #

您也可以使用/venvs/myenv3.5/bin/pip 将东西安装到 virtualenv 中:

RUN /venvs/myenv3.5/bin/pip install numpy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2021-07-22
    • 2017-10-18
    • 1970-01-01
    • 2019-12-24
    • 2017-09-29
    • 2019-07-01
    相关资源
    最近更新 更多