python - 无法在 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/) ...
我对此感到非常困惑。
解决方案
我刚刚注意到“http.server”前面有一个空格,这使得python3无法找到该模块。
我在我的 Dockerfile 上编辑了 CMD 行,它现在正在工作:
CMD ["python3", "-m", "http.server", "8000"]
仍然不太清楚为什么之前在“http.server”前面添加了一个空格。
推荐阅读
- github - 无法在 GitHub Pages 上部署 create-react-app 应用程序
- javascript - 将数值数据从 Javascript 写入 HTML 表格单元格
- arrays - 将 inet[] 加入 inet
- javascript - 角度未定义
- database - 安装 APK 文件时如何包含多个数据库?
- javascript - HTML 中奇怪的模糊文本(画布和 svg)
- java - 如何在我的网站上放置一个服务器类,以便我的客户端类可以从不同的计算机与其通信?
- python - _queryDescriptors.type() == trainDescType 使用 BoW of ORB 特征训练 SVM 错误
- python - 当我使用多个“if”循环时,为什么它一直说“语法错误”?
- javascript - 没有通过 jquery flot 生成的图形