Docker运行带参数Python脚本失败:传参提示找不到可执行文件
问题原因与解决方案
核心问题
你遇到的错误本质是Docker中CMD和ENTRYPOINT指令对命令行参数的处理逻辑不同:
- 当使用
CMD ["python3", "my_main.py"]时,docker run命令末尾追加的2017会完全替换整个CMD指令,Docker会尝试直接执行2017这个"可执行文件"——显然系统里没有这个命令,所以报错找不到。 - 换成
ENTRYPOINT ["python3", "my_main.py"]后,docker run末尾的参数会追加到ENTRYPOINT的命令之后,最终执行的是python3 my_main.py 2017,这正好符合你通过sys.argv获取参数的需求。
两种可行解决方案
方案1:使用ENTRYPOINT(已验证有效)
保持Dockerfile中的ENTRYPOINT配置:
ENTRYPOINT ["python3", "my_main.py"]
之后执行docker run时直接追加参数即可:
docker run --rm -v /mnt/c/host_path1:/app/container_path1 -v /mnt/c/host_path2:/app/container_path2 -v /mnt/c/host_path3:/app/container_path3 my_image 2017
方案2:保留CMD,明确指定完整执行命令
如果不想修改Dockerfile的CMD,可以在docker run时直接写出完整的执行命令,避免参数替换CMD:
docker run --rm -v /mnt/c/host_path1:/app/container_path1 -v /mnt/c/host_path2:/app/container_path2 -v /mnt/c/host_path3:/app/container_path3 my_image python3 my_main.py 2017
补充说明
不传参数时CMD能正常运行,是因为Docker直接执行python3 my_main.py,匹配你的脚本无参数时的默认逻辑。
内容的提问来源于stack exchange,提问作者gomeslhlima
相关产品推荐
相关产品推荐

