如何在docker中使用source?

How to use source in docker?

我正在尝试在 docker 中使用 virtualenv 以实现部署兼容性。但是执行到这一行就出错了:

CMD source openparty/bin/activate

我不知道。

IIRC,CMD 执行一个单独的 shell 所以 source 即使它确实有效也不会做你需要它做的事情。 source 命令从指定的文件中读取并执行命令。在 virtualenv 的情况下,它定义了一堆环境变量,最值得注意的是 PATH。相信大家可以简单的把虚拟环境的路径加到PATH前面,得到类似的效果。

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

而不是必须与 shell 中介搏斗。