当前位置: 首页 > 知识库问答 >
问题:

Dockerfile运行Python Pipenv构建失败

太叔经赋
2023-03-14

在学习如何对应用程序进行dockerize时,我遇到了一个障碍,Dockerfile构建无法输出:

app_1  | Traceback (most recent call last):
app_1  |   File "app.py", line 4, in <module>
app_1  |     from flask import Flask, render_template, request, json
app_1  | ModuleNotFoundError: No module named 'flask'
bucketlist-flask-mysql_app_1 exited with code 1

容器中的目录结构为:

/应用程序

/应用程序-

存储库中的目录是

Dockerfile docker编写。yml/src

/src-

Dockerfile是:

# alpine with py3.8 - reqd version of python for pipenv
from python:3.8-alpine

#EXPOSE port, default is 5000, app uses 5000
EXPOSE 5000

# create a directory to run the app in
WORKDIR /app

# install pip system-wide
RUN pip install pipenv

#move the files into /app
COPY src/Pipfile.lock /app

# add the application files
COPY src/FlaskApp /app

# run the application at launch
RUN pipenv install --ignore-pipfile
CMD ["pipenv", "run", "python3", "app.py"]

Docker-comment是:

version: "3"
services:
    app:
        build: .
        links:
            - db
        ports:
            - "5000:5000"
    db:
        image: mariadb
        restart: always
        ports:
            - "32000:3306"
        environment:
            MYSQL_ROOT_PASSWORD: root
        volumes:
            - ./src/sql_scripts:/docker-entry-point-initdb.d/:ro

我已经做了相当多的迭代和故障排除。如果我运行python:3.8-alpine容器并手动复制Pipfile。锁和应用程序。py我可以在sh中运行:

pip install pipenv
pipenv install --ignore-pipfile
pipenv run python3 app.py

当从sh手动运行时,应用程序可以完美地构建和运行,我目前的最佳结论是,这些进程可能正在并发运行,并且不允许pipenv安装完成执行

作为参考,我相信python很好,但它只是应用程序的前4行。它们是:

#!/bin/bash
"exec" "pipenv" "run" "python3" "$(pwd | sed 's?src.*?src/FlaskApp/app.py?g')"
#START: app.py code \/
from flask import Flask, render_template, request, jsom

共有1个答案

萧献
2023-03-14

解决方案!经过大量的故障排除,我通过清除我的docker容器解决了这个问题,真正的解决方案是在您的docker文件更改后,您需要在运行docker-composup之前运行docker-composup。我假设在关闭容器时涉及到这个过程,并且不知道docker-composdown命令。

 类似资料:
  • 这是我编写的Dockerfile文件,但是构建镜像的时候发现没有执行npm install,自然也不会有dist文件,不知道是哪里写的有问题,请教一下大家

  • 我有我的身材。gradle文件已设置,我的项目到目前为止运行良好。现在的问题是我什么时候跑步/gradlew运行时失败,错误为: 错误:任务“:运行”的执行失败。进程'command'/usr/lib/jvm/java-7-openjdk-amd64/bin/java''以非零出口值1结束 ./gradlew构建成功,任何关于原因的线索,也尝试检查以前的线程,但都没有用。下面是我的毕业证书。生成文

  • 是否可以从Dockerfile构建映像并使用单个命令运行它 有一个命令来构建Dockerfile,还有来运行映像。 有没有这两个命令的任何组合,使它更容易构建和运行只有一个命令?

  • 我们有一组UI测试每晚运行,有时一些测试由于网络故障而失败。为了避免假阴性测试结果,我使用了,它可以重新运行失败的测试多达3次。 当我从Eclispe右键单击套件运行测试时,它工作得非常好。xml—如果测试最初失败,但重试时通过,则第一个结果不算作失败。 但是,当作为Maven构建的一部分运行相同的测试时,如果任何测试失败,即使在重试时成功通过,构建也会失败。 例如,运行一个包含5个测试的套件,其

  • 问题内容: 直到几天前,它仍能正常工作,而当我今天再次尝试构建它时,终端中出现以下错误。我尝试使用多个docker基本映像,但仍给出相同的错误。谁能帮我这个?我不认为我错过了任何东西。如果我错过了,应该早点给我错误,但是现在为什么呢? 而我的docker版本是 这是我的 问题答案: 我刚刚更改了VM Player网络设置。从更改为。现在工作了

  • 我正在jenkins上运行一组测试,我得到以下结果: 好的东西告诉我行: maven-surefire-插件: 2.16是这里的问题,所以这里是我的pom文件检查: 我已经检查了maven仓库中的插件,我看到的唯一区别是插件标签中有插件,而在网站中它是在依赖标签中。 这里可能有什么错误? 谢谢 注:抱歉纯文本,但我不知道如何给代码上色=/