Docker启动Python容器报错无法找到main.py文件问题排查
问题原因
你的main.py已经通过COPY . .指令正确复制到镜像内,不存在文件丢失的问题,报错根源是Dockerfile中CMD的exec格式写法错误。
Docker规定,当ENTRYPOINT、CMD使用JSON数组形式(即exec模式)编写启动命令时,数组内每个元素必须是独立的命令参数,不能把多个参数拼接在同一个字符串中。你当前配置的CMD ["main.py btcusdt"],会把main.py btcusdt整体作为一个完整的文件路径传给python3,解释器自然找不到名称包含空格、后缀带btcusdt的文件,才会抛出对应的找不到文件错误。
你提供的本地项目结构如下,main.py直接位于项目构建上下文的根目录,复制进镜像后路径完全可以被正常访问:
修复方法
修改Dockerfile中CMD段的写法,把脚本名和运行参数拆分为独立的数组元素即可:
FROM python:3.8 COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . ENTRYPOINT ["python3"] CMD ["main.py", "btcusdt"]
修改完成后重新执行镜像构建命令,再用新镜像启动容器就可以正常运行脚本。
额外提示:你也可以选择shell格式编写启动命令,写法为
CMD python3 main.py btcusdt,但exec模式是Docker官方推荐的写法,对进程信号的处理更稳定,优先使用拆分参数的exec模式配置。
内容的提问来源于stack exchange,提问作者Selman
相关产品推荐
相关产品推荐

