AWS CLI递归复制S3文件到本地显示成功但本地无文件问题
问题原因
- 核心问题是alias的命令替换展开时机错误:你用双引号包裹alias的配置内容,shell在加载
~/.bash_aliases时,就会直接把$(pwd)替换成加载配置那一刻你所在的目录路径,后续不管你cd到哪个目标目录执行aws命令,容器始终挂载的是这个固定的旧目录到容器内的/aws路径。 - 官方aws cli镜像的默认工作目录就是容器内的
/aws,你执行cp命令下载到.的文件,实际都写到了那个固定的旧挂载目录里,加上你给docker加了--rm参数,容器执行完就自动删除,你在后来cd进入的目标目录当然找不到文件。 - 额外排查项:你贴出的alias配置末尾缺少闭合双引号,如果实际配置里也有这个语法问题,也会导致挂载参数异常。
解决步骤
- 编辑
~/.bash_aliases文件,把alias的包裹引号改成单引号,保证$(pwd)会在每次执行aws命令时动态读取当前工作目录,同时补全末尾的闭合引号,配置如下:alias aws='docker run --rm -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli' - 执行命令重新加载别名配置,让修改生效:
source ~/.bash_aliases - 重新cd到存放下载文件的目标目录,再次执行s3递归复制命令,文件就会正常出现在当前目录了。
验证小技巧:重新加载配置后,可以先在当前目录新建一个测试文件,执行
aws ls .如果能看到这个测试文件,说明挂载路径已经正常生效。
内容的提问来源于stack exchange,提问作者AK91
相关产品推荐
相关产品推荐

