有没有办法自动激活一个virtualenv作为docker入口点?

我有一个泊坞窗容器内的瓶子应用程序。 我想使用python软件包zappa将该应用程序部署到Amazon Web Services。

不幸的是,zappa要求它和我的所有应用程序依赖项都安装在Python 虚拟环境中

所以我重build了我的Docker镜像,并把所有的东西都搬到了虚拟环境中。

问题是,现在我不能运行如下命令:

docker exec <container> flask <sub command> 

因为烧瓶安装在尚未激活的虚拟环境中。

我仍然可以这样做:

 host$ docker exec -it <container> bash container$ source venv/bin/activate container$ flask <sub command> 

另外,我不能再运行默认的Dockerfile CMD(gunicorn),因为那也是我的虚拟环境。

这是否更有意义?

作为与脚本内联的脚本的替代方法,您可以创build一个充当ENTRYPOINT的脚本。 一个例子entrypoint.sh看起来像这样:

 #!/bin/sh source venv/bin/activate exec "$@" 

然后在你的Dockerfile复制这个文件并将其设置为ENTRYPOINT

 FROM myimage COPY entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] 

现在你可以像docker run mynewimage flask <sub command>docker run mynewimage gunicorn

尝试:

 docker exec <container> sh -c 'source venv/bin/activate; flask <sub command>' 

你的命令可以是:

 CMD sh -c 'source venv/bin/activate; gunicorn...'