如何在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
相关产品推荐
相关产品推荐

