【问题标题】:dynamo db local shell doesn't list tables using docker imagedynamodb 本地 shell 不使用 docker 映像列出表
【发布时间】:2019-07-10 03:02:59
【问题描述】:

我正在使用启用 docker 的本地 dynamoDB,如提到的 here

以下是我的 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),也许它可以帮助某人......

标签: node.js amazon-web-services docker amazon-dynamodb dynamo-local


【解决方案1】:

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

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

【讨论】:

  • 在 Docker 运行命令中添加 -sharedDb 对我不起作用。我不得不使用docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb
  • @andyberry88 太好了,这终于奏效了!另外不要忘记,在您第一次使用-sharedDb 开始后,您必须重新创建表。
  • 我试图用docker-compose 来代替,但找不到在/shell 中列出表格的方法。直接使用docker 运行它。
  • 我可以用 docker compose 做到这一点。我像这样覆盖命令:command: -jar DynamoDBLocal.jar -sharedDb
【解决方案2】:

正如@Mendhakanother answer here 上的cmets 中指出的那样,如果您使用的是docker-compose,则需要共享数据库,您可以通过覆盖docker-compose 中的command 来实现.yml

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 - 如果对您有帮助,您可以点赞他的评论以及这个答案!

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      {
      
          "message": "CRC32 integrity check failed",
      
          "code": "CRC32CheckFailed",
      
          "retryable": true,
      
          "time": "2022-02-02T19:53:18.508Z",
      
          "statusCode": 200
      
      }
      

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      • 2020-11-02
      • 2021-10-30
      • 2021-11-08
      • 1970-01-01
      • 2022-08-24
      • 1970-01-01
      相关资源
      最近更新 更多