Docker容器通过CMD启动Python3 http.server报错找不到http模块如何解决?
问题原因
Dockerfile中CMD指令使用exec数组格式时,会严格将数组的每一个元素作为独立参数传递给启动程序,不会自动按空格拆分参数。你当前的写法将-m和http.server合并为同一个参数项:
CMD ["python3", "-m http.server", "8000"]
实际传给Python3的参数相当于执行python3 "-m http.server" 8000,Python会将带前置空格的 http.server整体作为模块名查找,因此抛出找不到 http模块的错误。
你手动进入容器执行命令时,Shell会自动按空格拆分参数,相当于正确传递了-m、http.server两个独立参数,所以可以正常运行。
解决方案
将CMD指令的参数拆分为独立的数组项即可,修改后的Dockerfile对应行如下:
CMD ["python3", "-m", "http.server", "8000"]
修改后重新构建镜像启动容器即可正常运行。
内容的提问来源于stack exchange,提问作者Alvin
相关产品推荐
相关产品推荐

