docker运行flask:没有名为flask的模块

voj3qocg  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(327)

我正在努力完成我的学校作业,那就是:
叉子https://github.com/aaronjolson/flask-pytest-example
编写jenkinsfile,dockerfile->在dockerhub repo上生成一个新标记
拉 Docker
构建docker
运行docker
curl localhost:5000 to 查看结果
目前我在第5阶段,尝试运行docker映像时出现以下错误:

Traceback (most recent call last):

File "app.py", line 1, in <module>

from flask import Flask

ImportError: No module named flask

配置:
Jenkins正在研究Debian9
使用docker client for windows拉取和运行docker映像
Jenkins档案:

it@debian:~/flask-pytest-example$ cat Jenkinsfile
pipeline {
    environment {
        registry = "tslaceo/flask-pytest"
        imageName = 'flask-pytest'
        registryCred = 'tslaceo'
        gitProject = "https://github.com/tslaceo/flask-pytest-example.git"
    }
    agent any
    options {
        timeout(time: 1, unit: 'HOURS')
    }
    stages {
        stage ('preparation') {
            steps {
                deleteDir()
            }
        }
        stage ('get src from git') {
            steps {
                git 'https://github.com/tslaceo/flask-pytest-example.git'
            }
        }
        stage ('build docker') {
            steps {
                script {
                    dockerImage = docker.build registry + ":$BUILD_NUMBER"
                }
            }
        }
        stage ('docker publish') {
            steps {
                script {
                    docker.withRegistry( '', registryCred ) {
                        dockerImage.push()
                    }
                }
            }
        }
        stage ('cleaning') {
            steps {
                sh "docker rmi $registry:$BUILD_NUMBER"
            }
        }
    }
}

dockerfile文件:

it@debian:~/flask-pytest-example$ cat Dockerfile
FROM python
WORKDIR /flask-pytest-example
RUN python --version
RUN pip freeze > requirements.txt
RUN pip install --upgrade pip && pip install -r requirements.txt
COPY . .
CMD ["python", "-u", "app.py"]

要求.txt

it@debian:~/flask-pytest-example$ cat requirements.txt
flask
pytest

ls-洛杉矶

it@debian:~/flask-pytest-example$ ls -la
total 52
drwxr-xr-x  5 it it 4096 Apr 27 15:28 .
drwxr-xr-x 19 it it 4096 Apr 27 14:42 ..
-rw-r--r--  1 it it  178 Apr 27 10:32 app.py
-rw-r--r--  1 it it  202 Apr 27 15:06 Dockerfile
-rw-r--r--  1 it it  152 Apr 27 12:39 Dockerfile.save
drwxr-xr-x  8 it it 4096 Apr 27 15:06 .git
-rw-r--r--  1 it it   38 Apr 27 10:32 .gitignore
drwxr-xr-x  2 it it 4096 Apr 27 10:32 handlers
-rw-r--r--  1 it it    0 Apr 27 10:32 __init__.py
-rw-r--r--  1 it it 1147 Apr 27 10:48 Jenkinsfile
-rw-r--r--  1 it it 1071 Apr 27 10:32 LICENSE
-rw-r--r--  1 it it  491 Apr 27 10:32 README.md
-rw-r--r--  1 it it   13 Apr 27 10:32 requirements.txt
drwxr-xr-x  2 it it 4096 Apr 27 10:32 tests
4ngedf3f

4ngedf3f1#

删除 RUN pip freeze ... 线路;替换为 COPY requirements.txt . 获取与应用程序其余部分一起签入的文件副本。
您显示的dockerfile中的流是
从一个干净的、空的python安装开始;
列出所有安装在那里的软件包(也就是说,什么都没有)并写入 requirements.txt ;
安装中列出的所有软件包(即不安装任何软件包) requirements.txt .
这个 requirements.txt 文件应该作为应用程序源代码的一部分签入,所以如果 COPY 这不是重新生成它,而是在其中列出了包,它将是您在非docker虚拟环境中测试的包的精确版本。
我可能会把基于jenkins的构建设置作为这个序列中的最后一件事。更好的方法可以是:
使用普通的python虚拟环境构建应用程序;没有Jenkins,没有 Docker 。

python3 -m venv venv
. venv/bin/activate
pip install -r requirements.txt
pytest
./app.py
curl http://localhost:5000

使用上面显示的dockerfile,将构建的、工作的、测试过的python应用程序 Package 到docker容器中。

docker build -t tslaceo/flask-pytest .
docker run -p 5000:5000 tslaceo/flask-pytest
curl http://localhost:5000

用Jenkins Package 这个装置。
如果应用程序出现问题(通常情况下),虚拟环境设置将更易于调试,您可以使用普通编辑器、ide、调试器等,而无需任何特殊设置。如果你的 Package 有问题,那就开始吧 docker build 本地调试和调整也比在ci环境中重新生成更容易。

相关问题