有没有办法自动激活一个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...'