【发布时间】:2021-12-08 22:24:07
【问题描述】:
我是 Docker 新手,正在尝试 Dockerize 我的 FastAPI 应用程序。 首先我创建了一个 Dockerfile:
FROM python:3.9.9
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
然后运行以下命令:
docker build -t fastapi .
命令运行成功。
之后我创建了以下 docker-compose.yml:
version: "3"
services:
api:
build: .
ports:
- 8000:8000
env_file:
./.env
然后运行以下命令:
docker-compose up -d
运行成功:
Network fastapi_default Created 0.7s
- Container fastapi_api_1 Started
然后为了检查它是否正常运行,我运行了以下命令:
docker ps -a
它显示容器在创建后几秒钟就退出了。
然后我运行了这个命令:
docker logs fastapi_api_1
它说:
/bin/sh: 1: [uvicorn,: not found
不知道是什么原因。尝试了一些我在网上找到的解决方案,但没有成功。我的 requirements.txt 文件中有 uvicorn。
我们将提供帮助。如果需要其他信息,请告诉我。
【问题讨论】:
-
该错误几乎总是意味着
CMD中的 JSON 数组语法有问题。您在问题中显示的内容似乎是正确的;仔细检查您在各个单词周围是否有直双引号,以及它们之间的普通空格(不是单引号、Unicode“弯”引号或不同的 Unicode 空格)。 -
执行一次
docker run myimage uvicorn以查看其是否可用。只是为了排除它不是 CMD 语法的问题。 CMD 对我来说看起来不错。