12

我正在使用 docker enabled dynamoDB local,如此处所述

以下是我的 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 
4

4 回答 4

14

确保您还将 -sharedDb 传递给 docker 映像。

如果 -sharedDb 不存在,则 dynamodb-local 将使用
访问键+区域作为命名空间来分隔表
(就好像它们在不同的 aws 帐户下一样)

于 2019-02-16T19:23:05.123 回答
9

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

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 - 如果对您有帮助,您可以对他的评论和这个答案进行投票!

于 2020-07-15T21:35:37.050 回答
2

您可以在启动 docker dynamodb 时指定 -sharedDb 参数。

docker run -itd -p 8000:8000  --name dev-db amazon/dynamodb-local:latest -jar DynamoDBLocal.jar -sharedDb
于 2021-06-01T10:31:57.963 回答
0

仅当从 docker 运行应用程序时,我才面临远程 DDB 连接的相同问题。'listTables' API 工作(虽然有延迟),而 'batchGet' API 总是抛出这个错误:

{

    "message": "CRC32 integrity check failed",

    "code": "CRC32CheckFailed",

    "retryable": true,

    "time": "2022-02-02T19:53:18.508Z",

    "statusCode": 200

}

解决它的任何投入都会有所帮助!

于 2022-02-03T19:11:47.717 回答