在docker compose中使用flask时,无法创建shim:OCI运行时



这是我的Dockerfile

# Pull node docker image
FROM python:3.7-buster
RUN mkdir -p /home/deployment && chown -R root:root /home/deployment
WORKDIR /home/deployment
COPY weldTrace-linux ./
COPY verified.json ./
COPY flaskapp ./

我的docker-compose.yml

version: "1.0"
services:
mongo:
image: mongo:4.4.14
command: mongod --port 27018
ports:
- 27018:27018
volumes:
- ${DBPATH}:/data/db
web:
build: .
ports:
- 3000:3000
command: ./app-linux
depends_on:
- mongo
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
- ${MEDIAPATH}:/data/media
flask:
image: python:3.7-buster
ports:
- 5000:5000
# volumes:
#   - ${PIPPATH}:/usr/local/lib/python3.7/site-packages
#   - ./flaskapp:/home/deployment/flaskapp
# working_dir: /home/deployment/flaskapp
command: flask run
#   depends_on:
#     - requirements
# requirements:
#   image: python:3.7-buster
#   volumes:
#     - ${PIPPATH}:/usr/local/lib/python3.7/site-packages
#     - .:/home/deployment/flaskapp
#   working_dir: /home/deployment/flaskapp
#   command: pip install -r requirements.txt
volumes:
data:
external: true
pip37:
external: true

和我的PIPPATH=D:Programmingpip37

当我执行docker-compose up时,我最终得到以下错误

后台进程的错误响应:未能创建填充程序:OCI运行时创建失败:container_linux.go:380:启动容器进程导致:执行官:";烧瓶":在$PATH中找不到可执行文件:未知

关于如何解决这个问题有什么想法/建议吗?由于mongo中的Dockerfile库,我无法使用RUN命令安装任何python、pip及其包。

正如其他人所指出的,python:3.7-buster映像没有安装flask。因此,在执行flask run命令之前,需要安装flask。对于您的设置,这可以通过以下两种方式之一完成:

选项1:

由于Dockerfile中的基本映像也是python:3.7-buster,因此可以添加安装flask的指令,就像Kesha建议的那样。Dockerfile的精简/定制版本如下:

FROM python:3.7-buster
RUN mkdir -p /home/deployment && chown -R root:root /home/deployment
RUN pip install flask
WORKDIR /home/deployment
COPY app.py ./

然后在docker-compose.yml中,为服务web构建的图像可以被重新用于服务flask。精简组成文件如下:

version: "3.3"
services:
web:
build: .
image: flaskapp:latest
ports:
- 3000:3000
command: echo "Service 'web' exiting.."
flask:
image: flaskapp:latest
ports:
- 5000:5000
command: flask run --host=0.0.0.0
depends_on:
- web

flask run命令执行时没有任何错误,因为flask已经安装到自定义docker镜像中

选项2:

继续使用python:3.7-buster作为服务flask的映像。在这种情况下,在启动服务之后,需要在flask run命令之前执行pip install flask命令。修改后的组成文件如下:

version: "3.3"
services:
web:
build: .
image: flaskapp:latest
ports:
- 3000:3000
command: echo "Service 'web' exiting.."
flask:
image: python:3.7-buster
ports:
- 5000:5000
volumes:
- ./app.py:/home/deployment/app.py
working_dir: /home/deployment
command: 
- /bin/sh
- -c
- |
pip install flask
flask run --host=0.0.0.0

您需要在dockerfile:中安装Flask

RUN pip install Flask

最新更新