【问题标题】:Running flask app on virtualenv inside docker container在 docker 容器内的 virtualenv 上运行烧瓶应用程序
【发布时间】:2017-10-31 14:13:35
【问题描述】:

所以我试图在 docker 容器上的 virtualenv 内运行烧瓶应用程序。

我的 Dockerfile 看起来像这样

FROM ubuntu:latest
MAINTAINER Gabriel Togni "togni@nmmi.edu"
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev build-essential python-virtualenv
COPY . /app
WORKDIR /app

RUN virtualenv test

WORKDIR test

RUN /bin/bash -c "source test/bin/activate; pip install -r requirements.txt"

ENTRYPOINT /bin/bash -c "source test/bin/activate; python app.py"

它构建没有错误,它运行没有错误,但它不工作。

我的requirements.txt 文件只有Flask==0.12.2,而我的app.py看起来像这样

from flask import Flask
import sys
app = Flask(__name__)

@app.route("/")
def hello():
        if getattr(sys, "real_prefix", None) is not None:
                return "Maybe in a virtualenv"
        else:
                return "Probably not in a virtualenv"

if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0')

我正在尝试在 Ubuntu Server 16.04.3 LTS 上执行此操作

编辑--

在我将; 添加到我的代码后,问题得到了解决

RUN /bin/bash -c "source test/bin/activate; pip install -r requirements.txt"

ENTRYPOINT /bin/bash -c "source test/bin/activate; python app.py"

【问题讨论】:

    标签: python ubuntu docker flask dockerfile


    【解决方案1】:

    入口点将在WORKDIR 中运行。您的文件 app.py 不在 /app 上,这是您的 WORKDIR,它在 /app/test 上。您必须发送入口点命令的路径,因为他在当前目录中找不到文件:

    ENTRYPOINT /bin/bash -c "source bin/activate python test/app.py"
    

    【讨论】:

    • 注意我有两个WORKDIR。第一个是/app,第二个是test。因此,entrypoint 将在 WORKDIR test 上运行
    • @GabrielLealTogni 没有注意到这一点。你是对的
    • @GabrielLealTogni “不起作用”是什么意思?你检查过容器的日志吗?
    猜你喜欢
    • 1970-01-01
    • 2017-10-18
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    相关资源
    最近更新 更多