Dockerfile运行Python Pipenv构建失败



在学习如何对应用程序进行码头化时,我遇到了一个障碍,我的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

容器中的目录结构为:

/app

/app->app.py Pipfile.lock

存储库中的目录是

Dockerfile docker-compose.yml/src

/src->Pipfile Pipfile.lock sql_scripts/FlaskApp/app.py

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的组成是:

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.lock和app.py上,我可以在sh:中运行

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

当从sh手动运行时,应用程序会构建并完美运行,我目前的最佳结论是,进程可能同时运行,而不允许pipenv安装完成执行?

作为参考,我相信python很好,但app.py的前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

解决方案!经过大量的故障排除,我通过清除docker容器解决了这个问题,真正的解决方案是在docker文件发生更改后,您需要在运行docker-compose up之前运行docker-compose down。我以为在关闭容器时会涉及到这个过程,而不知道docker compose down命令。

最新更新