DynamoDB本地Shell在使用Docker镜像时无法列出表

17
我正在使用启用了Docker的DynamoDB本地版本,如此处所述:这里。以下是我的JS代码:
AWS.config.update({
  region: 'sas',
  endpoint:  'http://docker.for.mac.host.internal:8000' //'http://localhost:8000'
});

以下是创建表格函数:

function createTable() {
    let params = {
        TableName: 'sas',
        KeySchema: [{
            AttributeName: 'title',
            KeyType: 'HASH',
        }],
        AttributeDefinitions: [{
            AttributeName: 'title',
            AttributeType: 'S'
        }],
        ProvisionedThroughput: {
            ReadCapacityUnits: 1,
            WriteCapacityUnits: 1,
        }
    };
    dynamoDB.createTable(params, function(err, data) {
        if (err)
            console.log(err); // an error occurred
        else
            console.log(data);
    });
}   

我可以使用CLI看到已创建的表格sas

aws dynamodb list-tables --endpoint-url http://localhost:8000 --region=sas  

但是不要在代码中列出表格,而且它总是为空。

http://localhost:8000/shell/
任何想法吗?
注意:我可以通过在本地运行DynamoDB jar文件来查看上述代码中的表。
 java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb 

对我来说,解决问题的方法是检查我的.aws\config文件中的区域,并将其设置为与您在JS代码中提到的区域相同 - sas(对我来说,它设置为eu-west-2),也许可以帮助其他人... - R13mus
3个回答

17

确保在运行docker映像时也传递-sharedDb参数。

如果没有出现-sharedDb,则dynamodb-local将使用访问密钥+区域作为命名空间来分隔表(就像它们位于不同的AWS帐户下)。


2
仅仅在Docker运行命令中添加-sharedDb并不能让它对我起作用。我必须使用docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb - andyberry88
@andyberry88 太好了,终于成功了!还要记得在首次使用“-sharedDb”后重新创建表格。 - Dmitriy Popov
我本来想用 docker-compose 来实现,但是无法找到一种方法将表格列在 /shell 中。直接使用 docker 运行就可以了。 - Jonathan Morales Vélez
5
我可以用Docker Compose来完成它。我像这样覆盖了命令:command: -jar DynamoDBLocal.jar -sharedDb - Mendhak

14

正如@Mendhak此处的另一个答案的评论中指出的那样,如果您正在使用docker-compose,则需要共享数据库,您可以通过覆盖docker-compose.yml中的command来实现。

version: "3.7"
services:
  dynamodb-local:
    image: amazon/dynamodb-local:latest
    container_name: dynamodb-local
    ports:
      - "8000:8000"
    command: -jar DynamoDBLocal.jar -sharedDb

我在AWS的文档中没有看到这个信息,所以我想留下这个答案,以提高其他漫游开发人员的可见性。

感谢Mendhak - 如果它对您有帮助,您可以给他的评论点个赞,也可以给这个答案点个赞!


4

当您启动Docker DynamoDB时,可以指定-sharedDb参数。

docker run -itd -p 8000:8000  --name dev-db amazon/dynamodb-local:latest -jar DynamoDBLocal.jar -sharedDb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接