【发布时间】:2015-03-06 02:55:17
【问题描述】:
我正在尝试在 docker 中使用 virtualenv 来实现部署兼容性。但是执行到这一行就出错了:
CMD source openparty/bin/activate
我不知道。
【问题讨论】:
标签: django shell docker virtualenv
我正在尝试在 docker 中使用 virtualenv 来实现部署兼容性。但是执行到这一行就出错了:
CMD source openparty/bin/activate
我不知道。
【问题讨论】:
标签: django shell docker virtualenv
IIRC,CMD 执行一个单独的 shell,所以 source 不会做你需要它做的事情,即使它确实有效。 source 命令从指定文件读取并执行命令。对于virtualenv,它定义了一堆环境变量,最值得注意的是PATH。相信你可以简单的把虚拟环境的路径加到PATH前面,也能得到类似的效果。
【讨论】:
ENV PATH $PATH:openparty/bin/activate 你是说这个吗?成功了,谢谢!
ENV PATH openparty/bin:$PATH,因为PATH 变量是一个目录列表,而activate 是一个shell 脚本。
ENV PATH $PATH:openparty/bin/有区别吗?
activate 脚本仅用于获取为该 virtualenv 配置的交互式 shell。您可以使用 Dockerfile 来实现这一点……
CMD ["bash", "--rcfile", "openparty/bin/activate"]
但是如果你只是想在你的 virtualenv 的上下文中运行一个 Python 命令,直接引用 virtualenv 的 python 会更简洁:
ENTRYPOINT ["openparty/bin/python", "openparty/bin/manage.py"]
然后你可以调用类似的命令
docker run --rm -P openparty_image runserver
而不必与壳中介搏斗。
【讨论】: