skip to Main Content

Hello have a simple Dockerfile which has to create the DynamoDB tables:

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                                                                                                                                 

When I’m trying to run it I get the following output:

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

What am I doing wrong? Thanks for any help!

2

Answers


  1. In your command you must not have a space after that why maybe you recevie the error because the rest statements is ignored.

    Try test again with this :

    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
    

    And also try to have a fake profile, because its need an access key and a secret key even if its locally

    Login or Signup to reply.
  2. With this particular image, the CMD must be in JSON-array syntax (one shell word to an array element) and must not contain the aws command.

    FROM amazon/aws-cli
    CMD ["dynamodb", "create-table", "..."]                                                                                                                                                  
    

    This is because 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. Your main container command in the current form is something like aws sh -c 'aws dynamodb ...' which the tool doesn’t really understand.

    (I might run this particular command as a standalone docker run command and not try to package it into an image, or possibly use the AWS SDK as part of your integration-test setup code. The explicit localhost endpoint also seems like it might not work well, since that will usually refer to the same container that’s only running the AWS CLI.)

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search