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

如何在Docker Compose中执行aws s3 sync命令?

如何在Docker Compose中执行aws s3 sync命令?

看起来你遇到的问题是Docker Compose里命令参数的写法不对导致的,我来帮你梳理下问题所在并解决它。

问题根源

amazon/aws-cli镜像的默认入口点(ENTRYPOINT)已经设置为aws命令了,你原来的command写法是把整个s3 sync ...作为单个参数传给aws,这时候AWS CLI会把这个完整字符串当成要执行的主命令,自然找不到对应的命令,所以才会抛出argument command: Invalid choice的错误。

解决方案一:正确拆分命令参数(推荐)

把command里的内容拆成单独的数组元素,每个参数(包括s3、sync、路径、--delete)都单独列出来,这样Docker会正确把参数传递给aws命令:

version: '3.8'

services:
  amazon-aws-cli-download-test-data:
    image: amazon/aws-cli:2.13.0 # <- 你使用的版本
    command:
      - s3
      - sync
      - s3://mybucket/myfolder/
      - /s3/mybucket/myfolder/
      - --delete
    environment:
      - AWS_ACCESS_KEY_ID
      - AWS_SECRET_ACCESS_KEY
      - AWS_REGION
    volumes:
      - './test-data/s3:/s3'

解决方案二:覆盖入口点(可选)

如果你更习惯写完整的命令字符串,可以覆盖镜像的ENTRYPOINT为sh -c,然后把完整的aws s3 sync ...命令作为参数传递:

version: '3.8'

services:
  amazon-aws-cli-download-test-data:
    image: amazon/aws-cli:2.13.0
    entrypoint: ["sh", "-c"]
    command:
      - "aws s3 sync s3://mybucket/myfolder/ /s3/mybucket/myfolder/ --delete"
    environment:
      - AWS_ACCESS_KEY_ID
      - AWS_SECRET_ACCESS_KEY
      - AWS_REGION
    volumes:
      - './test-data/s3:/s3'

额外注意事项

  • 确保你的环境变量(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_REGION)已经正确配置,比如通过.env文件或者运行docker-compose时手动传递。
  • 本地挂载的目录./test-data/s3要提前创建好,避免出现权限问题或者无法写入的情况。

备注:内容来源于stack exchange,提问作者Cherry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:14:37