如何使用 docker CMD 指令和 运行 容器内的 AWS CLI 创建 DynamoDB table?
How to create DynamoDB table using docker CMD instruction and the AWS CLI inside running container?
你好,有一个简单的 Dockerfile,它必须创建 DynamoDB 表:
FROM amazon/aws-cli AS seed
CMD \
aws dynamodb --endpoint-url http://localhost:8080 create-table \
--table-name mytable \
--attribute-definitions AttributeName=user_id,AttributeType=N AttributeName=order_id,AttributeType=N \
--key-schema AttributeName=user_id,KeyType=HASH AttributeName=order_id,KeyType=RANGE \
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
--region eu-west-2
当我尝试 运行 它时,我得到以下输出:
Attaching to my-container
my-container |
my-container | usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
my-container | To see help text, you can run:
my-container |
my-container | aws help
my-container | aws <command> help
my-container | aws <command> <subcommand> help
my-container |
my-container | aws: error: argument command: Invalid choice, valid choices are:
my-container |
my-container | accessanalyzer | account
my-container | acm | acm-pca
my-container | alexaforbusiness | amp
my-container | amplify | amplifybackend
my-container | amplifyuibuilder | apigateway
my-container | apigatewaymanagementapi | apigatewayv2
// Lot of services in here
my-container | s3 | ddb
my-container | configure | deploy
my-container | configservice | opsworks-cm
my-container | history | cli-dev
my-container | help
my-container |
my-container exited with code 252
我做错了什么?感谢您的帮助!
在你的命令中你必须在之后没有space\这就是为什么你可能会收到错误,因为其余的语句被忽略了。
再次尝试测试:
aws dynamodb --endpoint-url http://localhost:8080 create-table \
--table-name mytable \
--attribute-definitions AttributeName=user_id,AttributeType=N AttributeName=order_id,AttributeType=N \
--key-schema AttributeName=user_id,KeyType=HASH AttributeName=order_id,KeyType=RANGE \
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
--region eu-west-2
并且还尝试拥有一个虚假的配置文件,因为它需要一个访问密钥和一个秘密密钥,即使它是在本地
对于这个特定的图像,CMD
必须采用 JSON-array 语法(数组元素一个 shell 字)并且不得包含 aws
命令。
FROM amazon/aws-cli
CMD ["dynamodb", "create-table", "..."]
这是因为the aws-cli image declares ENTRYPOINT ["aws"]
, the ENTRYPOINT
and CMD
are combined into a single command, and string-format CMD
inserts a shell wrapper。当前表单中的主要容器命令类似于 aws sh -c 'aws dynamodb ...'
,该工具并不真正理解它。
(我可能 运行 这个特定的命令作为一个独立的 docker run
命令,而不是尝试将它打包成一个图像,或者可能使用 AWS SDK 作为你的 integration-test设置代码。显式 localhost
端点似乎也可能无法正常工作,因为它通常指的是仅 运行 AWS CLI 的同一个容器。)
你好,有一个简单的 Dockerfile,它必须创建 DynamoDB 表:
FROM amazon/aws-cli AS seed
CMD \
aws dynamodb --endpoint-url http://localhost:8080 create-table \
--table-name mytable \
--attribute-definitions AttributeName=user_id,AttributeType=N AttributeName=order_id,AttributeType=N \
--key-schema AttributeName=user_id,KeyType=HASH AttributeName=order_id,KeyType=RANGE \
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
--region eu-west-2
当我尝试 运行 它时,我得到以下输出:
Attaching to my-container
my-container |
my-container | usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
my-container | To see help text, you can run:
my-container |
my-container | aws help
my-container | aws <command> help
my-container | aws <command> <subcommand> help
my-container |
my-container | aws: error: argument command: Invalid choice, valid choices are:
my-container |
my-container | accessanalyzer | account
my-container | acm | acm-pca
my-container | alexaforbusiness | amp
my-container | amplify | amplifybackend
my-container | amplifyuibuilder | apigateway
my-container | apigatewaymanagementapi | apigatewayv2
// Lot of services in here
my-container | s3 | ddb
my-container | configure | deploy
my-container | configservice | opsworks-cm
my-container | history | cli-dev
my-container | help
my-container |
my-container exited with code 252
我做错了什么?感谢您的帮助!
在你的命令中你必须在之后没有space\这就是为什么你可能会收到错误,因为其余的语句被忽略了。
再次尝试测试:
aws dynamodb --endpoint-url http://localhost:8080 create-table \
--table-name mytable \
--attribute-definitions AttributeName=user_id,AttributeType=N AttributeName=order_id,AttributeType=N \
--key-schema AttributeName=user_id,KeyType=HASH AttributeName=order_id,KeyType=RANGE \
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
--region eu-west-2
并且还尝试拥有一个虚假的配置文件,因为它需要一个访问密钥和一个秘密密钥,即使它是在本地
对于这个特定的图像,CMD
必须采用 JSON-array 语法(数组元素一个 shell 字)并且不得包含 aws
命令。
FROM amazon/aws-cli
CMD ["dynamodb", "create-table", "..."]
这是因为the aws-cli image declares ENTRYPOINT ["aws"]
, the ENTRYPOINT
and CMD
are combined into a single command, and string-format CMD
inserts a shell wrapper。当前表单中的主要容器命令类似于 aws sh -c 'aws dynamodb ...'
,该工具并不真正理解它。
(我可能 运行 这个特定的命令作为一个独立的 docker run
命令,而不是尝试将它打包成一个图像,或者可能使用 AWS SDK 作为你的 integration-test设置代码。显式 localhost
端点似乎也可能无法正常工作,因为它通常指的是仅 运行 AWS CLI 的同一个容器。)