【发布时间】:2023-02-03 17:24:25
【问题描述】:
我是 docker 的新手,正在尝试对我的 fastapi 应用程序进行 docker 化。 我构建了一个如下所示的 Dockerfile
# syntax=docker/dockerfile:1
FROM python:3.8-slim-buster
WORKDIR /app
COPY requirements.txt requirements.txt
RUN apt-get update
RUN apt-get -y install libpq-dev gcc
RUN apt-get -y install libnss3-tools
RUN apt-get -y install curl
RUN curl -LJO https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64
RUN mv mkcert-v1.4.4-linux-amd64 mkcert
RUN chmod +x mkcert
RUN ./mkcert -install
RUN ./mkcert -cert-file cert.pem -key-file key.pem 0.0.0.0 localhost 127.0.0.1 ::1
RUN pip3 install -r requirements.txt
COPY . .
CMD ["python3.8", "-m", "uvicorn", "main:app", "--host=0.0.0.0", "--ssl-keyfile=./key.pem", "--ssl-certfile=./cert.pem"]
并运行容器,它们都工作了。但是当我尝试将容器与 docker 组合时,它告诉我即使在 requirements.txt 文件中也找不到 uvicorn 模块。 这是我的包含服务器服务的 docker compose 文件的 sn-p。
services:
server:
container_name: server
image: python:3.8-slim-buster
command: ["python3.8", "-m", "uvicorn", "main:app", "--host=0.0.0.0", "--ssl-keyfile=./key.pem", "--ssl-certfile=./cert.pem"]
ports:
- 8000:8000
working_dir: /app
我尝试使用将 docker compose 中服务器服务的命令部分更改为
command: bash "python3.8 -m uvicorn main:app --host=0.0.0.0 --ssl-keyfile=./key.pem --ssl-certfile=./cert.pem"
没用。 改成
command: sh -c "python3.8 -m uvicorn main:app --host=0.0.0.0 --ssl-keyfile=./key.pem --ssl-certfile=./cert.pem"
没用。
我完全删除了命令它仍然没有用,一直显示
server | /usr/local/bin/python3.8: No module named uvicorn
server exited with code 1
【问题讨论】:
-
您的
image似乎引用了本地 python-slim-buster 图像,而不是您构建的图像:image: python:3.8-slim-buster- 这应该是对您已经构建的容器镜像. -
您为服务设置的映像 (python:3.8-slim-buster) 不是从您的 docker 文件构建的映像。参考文档如何指定定义服务到use a built image from your dockerfile
-
@MatsLindh 非常感谢。它在使用我的自定义构建图像后起作用。
-
@OluwafemiSule 感谢首席,它在这样做之后起作用了。
标签: python docker docker-compose fastapi uvicorn