如何在Docker中通过指定路径参数挂载目录并传递给Python脚本
如何给Docker中的Python脚本传递自定义路径参数
问题背景
我有一个通过sys.argv接收输入/输出文件夹路径的Python脚本:
- 执行
python script.py时,使用默认的from和to目录 - 执行
python script.py from to时,使用指定的自定义路径
已构建Docker镜像,当前通过docker run -v "$(pwd):/folder" myimage运行时,脚本会触发默认路径逻辑。脚本的参数处理代码如下:
argl = len(sys.argv) if argl==1: dir_from = 'from' dir_to = 'to' elif argl == 3: dir_from = sys.argv[1] dir_to = sys.argv[2]
解决方案
Docker的run命令支持在镜像名称后追加容器内要执行的命令或参数,直接把自定义路径参数加在命令末尾即可,分两种场景说明:
场景1:镜像CMD指向python script.py
如果你的Dockerfile中定义了CMD ["python", "script.py"],直接在docker run命令末尾添加容器内的路径参数:
docker run -v "$(pwd):/folder" myimage /folder/custom_from /folder/custom_to
注:因为本地当前目录挂载到了容器的
/folder,所以容器内的路径要对应挂载目录下的位置,比如/folder/custom_from对应本地的./custom_from。
场景2:镜像ENTRYPOINT指向python script.py
如果Dockerfile用ENTRYPOINT ["python", "script.py"]定义了入口命令,同样在docker run末尾追加参数即可,命令格式和场景1完全一致。
注意事项
- 确保传递的路径在容器内存在,或属于挂载的目录范围
- 如果路径包含空格,需要用引号包裹参数:
docker run -v "$(pwd):/folder" myimage "/folder/custom from" "/folder/custom to"
执行上述命令后,容器内脚本的sys.argv长度会变为3,触发脚本中argl == 3的分支,使用你传递的自定义路径。
内容的提问来源于stack exchange,提问作者Talha Anwar
相关产品推荐
相关产品推荐

