Docker run Flask:没有名为Flask的模块

2024-04-18 21:24:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力完成我的学校作业,即:

  1. forkhttps://github.com/aaronjolson/flask-pytest-example
  2. 写入文件,Dockerfile->;在dockerhub repo上产生新标签
  3. 拉码头工人
  4. 建造码头工人
  5. 码头工人
  6. curl localhost:5000以查看结果

目前我处于第5阶段,在尝试运行docker映像时出现以下错误:

Traceback (most recent call last):

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

from flask import Flask

ImportError: No module named flask

配置:

  1. 詹金斯正在研究Debian 9
  2. 使用docker client for Windows拉取和运行docker映像
  3. 詹金斯档案:
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"
            }
        }
    }
}

  1. 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"]
  1. requirements.txt
it@debian:~/flask-pytest-example$ cat requirements.txt
flask
pytest
  1. ls-la
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

Tags: dockergitdockerfiletxtflaskpytestexampleit
1条回答
网友
1楼 · 发布于 2024-04-18 21:24:58

删除RUN pip freeze ...行;将其替换为COPY requirements.txt .,以获取该文件的副本,该副本将与应用程序的其余部分一起检入

您显示的Dockerfile中的流是

  1. 从干净、空的Python安装开始
  2. 列出安装在那里的所有软件包(也就是说,没有),并写入requirements.txt
  3. 安装requirements.txt中列出的所有软件包(即,不安装任何软件包)

requirements.txt文件应该作为应用程序源代码的一部分签入,因此如果您COPY将其签入而不是重新生成,则其中将列出包,并且它将是您在非Docker虚拟环境中测试的包的确切版本


我可能会将基于Jenkins的构建设置作为这个序列中的最后一件事。更好的办法可以是:

  1. 使用普通Python虚拟环境构建应用程序;没有詹金斯,没有码头工人

    python3 -m venv venv
    . venv/bin/activate
    pip install -r requirements.txt
    pytest
    ./app.py
    curl http://localhost:5000
    
  2. 使用上面显示的Docker文件,在Docker容器中包装您构建的、正在工作的、经过测试的Python应用程序

    docker build -t tslaceo/flask-pytest .
    docker run -p 5000:5000 tslaceo/flask-pytest
    curl http://localhost:5000
    
  3. 用Jenkins包装这个设置

如果您的应用程序出现问题(通常情况下),虚拟环境设置将更易于调试,您可以使用普通编辑器、IDE、调试器等而无需任何特殊设置。如果您的打包出现问题,那么在本地运行docker build将比在CI环境中复制它更容易调试和调整

相关问题 更多 >