You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向Docker传递URL和目录路径时Python报list index out of range如何解决

你遇到的list index out of range错误本质是Python脚本接收到的入参数量不足,由多处配置错误共同导致,修复步骤如下:

1 修复Python脚本

你的代码漏了sys模块导入,首先补充该声明:

import sys # 缺失的导入语句

def do_somthing(url, dir_path):
    #do something!

if __name__=="__main__":
    dir_path = sys.argv[1]
    url = sys.argv[2]
    do_somthing(url, dir_path)

2 修复shell脚本(test.sh)

原有两个核心配置错误:

  • getopts 规则中,需要接收参数的选项后要加:才能正常读取$OPTARG的值
  • 不存在$4变量,处理完选项参数后直接取剩余的位置参数作为URL即可
    修复后代码:
#!/bin/bash
while getopts 'i:' OPTION; do # 增加i后的冒号,表示该选项需要接参数
    case $OPTION in
        i) dir_pth=$OPTARG;;
    esac
done
# 移除已处理的选项参数,让位置指针指向URL参数
shift $((OPTIND - 1))
url=$1
# 按Python脚本的参数顺序传值:先传目录路径,再传URL
python python_fun.py $dir_pth $url

3 修正Dockerfile配置

你原来把脚本调用写在RUN指令里,这是镜像构建阶段执行的命令,无法接收运行容器时的动态参数。应该把执行逻辑设为容器启动命令,Dockerfile参考配置:

# 基础镜像、安装依赖等前置步骤自行补充
COPY python_fun.py .
COPY test.sh .
RUN chmod +x test.sh

# 设置启动命令,固定目录路径,容器运行时只需传入URL
ENTRYPOINT ["./test.sh", "-i", "/module/testdata/results/"]

4 修正Docker构建&运行命令

构建命令保持不变:

docker build -t myaccount/docker_name:latest .

运行容器时传入URL参数即可:

docker run --rm myaccount/docker_name:latest "你需要传入的下载URL"

内容的提问来源于stack exchange,提问作者Sarah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:27:03