首页 > 解决方案 > 无法在 Docker 的容器上运行 Python3 http.server

问题描述

我正在尝试创建一个 Docker 容器,它运行 Python http.server 在端口 8000 上侦听。这是我的 Dockerfile:

FROM ubuntu:20.04 AS focal

WORKDIR /usr/src/server
COPY . .

RUN apt update && apt-get install -y build-essential python python3 zip net-tools iptables sudo curl

CMD ["python3", "-m http.server", "8000"]

首先,我成功构建了镜像:docker build -t py_server .

然后我尝试将图像作为容器运行:docker run --rm -p 8000:8000 py_server

但是抛出了以下错误:

/usr/bin/python3: Error while finding module specification for ' http.server' (ModuleNotFoundError: No module named ' http')

http不确定为什么 python3在 Dockerfile 中使用 CMD 指定时无法找到该模块。http.server我通过在 py_server 映像上使用 bash 直接执行命令来测试容器中的 python3 是否具有,并且它有效:

$ docker run -it --rm -p 8000:8000 py_server bash
root@d3426b37cf2e:/usr/src/cs435_mp1_server# python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

我对此感到非常困惑。

标签: pythondocker

解决方案


我刚刚注意到“http.server”前面有一个空格,这使得python3无法找到该模块。

我在我的 Dockerfile 上编辑了 CMD 行,它现在正在工作:

CMD ["python3", "-m", "http.server", "8000"]

仍然不太清楚为什么之前在“http.server”前面添加了一个空格。


推荐阅读