我在docker容器里面有一个烧瓶应用程序.我想使用python包zappa将该应用程序部署到Amazon Web Services.
不幸的是,zappa要求它和我的所有应用程序依赖项都安装在python 虚拟环境中.
所以我重建了我的docker镜像并将所有内容都移到了虚拟环境中.
问题是,现在我无法运行如下命令:
docker exec <container> flask <sub command>
Run Code Online (Sandbox Code Playgroud)
因为flask安装在尚未激活的虚拟环境中.
我仍然可以这样做:
host$ docker exec -it <container> bash
container$ source venv/bin/activate
container$ flask <sub command>
Run Code Online (Sandbox Code Playgroud)
此外,我不能再运行我的默认Dockerfile CMD(gunicorn)因为那也是我的虚拟环境.
这有什么意义吗?
And*_*inn 12
作为仅使用命令内联脚本的替代方法,您可以创建一个充当脚本的脚本ENTRYPOINT.一个例子entrypoint.sh看起来像:
#!/bin/sh
source venv/bin/activate
exec "$@"
Run Code Online (Sandbox Code Playgroud)
然后在你的Dockerfile复制文件中将其设置为ENTRYPOINT:
FROM myimage
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)
现在你可以像docker run mynewimage flask <sub command>或那样运行它docker run mynewimage gunicorn.
您不需要激活环境。添加/path/to/virtualenv/bin到$PATH,然后python,pip等自动指向的virtualenv中的命令。
FROM python:3.4-alpine
WORKDIR /deps
ENV PATH=/virtualenv/bin:$PATH
RUN pip install virtualenv && \
mkdir virtualenv && \
virtualenv /virtualenv
COPY . /deps
Run Code Online (Sandbox Code Playgroud)
工作示例:
#Build dockerfile
docker build . -t="venv_example"
#Run all python commands in virtualenv w/ no hassle
docker run --rm venv_example which python
>/virtualenv/bin/python
docker run --rm venv_example which pip
>/virtualenv/bin/pip
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4892 次 |
| 最近记录: |