AWS Batch环境运行Docker容器执行命令失败无法运行脚本问题求助
核心报错原因
你遇到的exec: "mkdir -p log": executable file not found in $PATH报错,本质是对AWS Batch的命令解析规则和运行逻辑理解错误,以下是对应问题的解答:
1. 无法创建目录的原因&当前所处位置
AWS Batch的command数组默认会把每个数组元素当成一个独立的可执行文件去解析,你把mkdir -p logging整个字符串放在同一个数组元素里,系统不会自动拆分命令和参数,而是会尝试找名为mkdir -p logging的可执行文件,自然找不到,不是mkdir命令不存在,是解析规则错了。
当前你所处的默认工作路径为镜像Dockerfile中定义的WORKDIR路径,如果镜像没有显式指定WORKDIR,默认是/根目录。
2. 命令写法不符合规范,存在两处核心错误
- 命令拆分规则错误:正确的数组拆分方式是命令本身、每个参数各占一个元素,比如创建目录的命令应该拆分为
["mkdir", "-p", "logging"],而不是把整段命令放在同一个元素里。 - 运行逻辑完全错误:AWS Batch本身就是负责拉取镜像、启动容器的服务,你不需要在
command里再写docker run命令。这相当于你尝试在已经启动的容器内部再运行Docker,除非你的镜像内置了Docker二进制且配置了DinD权限,否则根本无法执行,也完全没有必要。
3. 你需要修正的配置&操作
你把作业定义的配置和容器内启动命令完全混淆了,正确的配置逻辑如下:
- 所有环境变量(APIKEY、BASEURI、APIUSER、APP_USER等)、卷挂载规则(宿主机路径到容器内
/src/log的映射)都直接在AWS Batch作业定义的对应配置项里填写,不需要写在command中。 - 删除
command里所有和docker run相关的内容,只保留需要在容器内执行的业务命令。如果要保留创建目录、改权限的逻辑,用shell包装整段命令即可,command写法参考:
"command": [ "/bin/sh", "-c", "mkdir -p logging && chmod 777 logging/ && python my_app.py -t $APP_USER -e $APP_ENVIRONMENT -u $APP_USERNAME -p $APP_PASSWORD -i $IN_PATH -o $OUT_PATH -b tmp/" ]
如果需要更稳定的执行逻辑,也可以把创建目录、改权限的步骤写到Dockerfile或者镜像内置的启动脚本里,command中只需要保留Python启动命令即可。
另外注意你之前写的-t -i是交互式终端参数,AWS Batch为非交互式运行环境,不需要加这两个参数,加了反而会导致启动报错。
内容的提问来源于stack exchange,提问作者Invic18
相关产品推荐
相关产品推荐

