英文:
Creating DynamodDB table on start of the localstack
问题
使用Localstack与DynamoDB,并需要在启动时默认创建一些表格。然而,我遇到了一个奇怪的错误:
/docker-entrypoint-initaws.d/init.sh: is a directory
docker-compose配置:
localstack:
    container_name: localstack
    image: localstack/localstack:latest
    network_mode: bridge
    ports:
      - "4566:4566"
      - "8010:8010"
    environment:
      - EDGE_PORT=8010
      - SERVICES=s3,dynamodb
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data
    volumes:
      - "$PWD/.localstack/init.sh:/docker-entrypoint-initaws.d/init.sh"
而 init.sh 文件如下:
awslocal dynamodb create-table \
   --table-name table-global \
   --attribute-definitions AttributeName=id,AttributeType=S \
   --key-schema AttributeName=id,KeyType=HASH \
   --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
我的环境:
- 操作系统:MacOS Ventura
 - Docker 版本:v4.16.2
 
我尝试了多种选项,但仍然无法解决问题。我不确定我可能做错了什么。
英文:
Using Localstack with Dynamodb and need to create some tables by default on the start. However, I am getting the strange error that:
/docker-entrypoint-initaws.d/init.sh: is a directory
docker-compose config:
localstack:
    container_name: localstack
    image: localstack/localstack:latest
    network_mode: bridge
    ports:
      - "4566:4566"
      - "8010:8010"
    environment:
      - EDGE_PORT=8010
      - SERVICES=s3,dynamodb
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data
    volumes:
      - "$PWD/.localstack/init.sh:/docker-entrypoint-initaws.d/init.sh"
and the init.sh looks like:
awslocal dynamodb create-table \
   --table-name table-global \
   --attribute-definitions AttributeName=id,AttributeType=S \
   --key-schema AttributeName=id,KeyType=HASH \
   --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
My stack:
- OS: MacOS Ventura
 - Docker: v4.16.2
 
I have tried multiple options but it still does not work. I am not sure what I might be doing wrong.
答案1
得分: 2
我通过更改您的 docker-compose.yml 文件来修复了您的问题:
version: "3.8"
services:
  localstack:
    container_name: "${LOCALSTACK_DOCKER_NAME-localstack_main}"
    image: localstack/localstack
    ports:
      - "127.0.0.1:4566:4566"
    environment:
      - DEBUG=1
      - DOCKER_HOST=unix:///var/run/docker.sock
    volumes:
      - "$PWD/init-aws.sh:/etc/localstack/init/ready.d/init-aws.sh"  # ready hook
      - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"
init-aws.sh 文件如下:
#!/bin/bash
awslocal dynamodb create-table \
   --table-name table-global \
   --attribute-definitions AttributeName=id,AttributeType=S \
   --key-schema AttributeName=id,KeyType=HASH \
   --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
请确保首先对文件运行 chmod +x init-aws.sh。
您可以通过以下命令验证此操作:
$ awslocal dynamodb list-tables
{
    "TableNames": [
        "table-global"
    ]
}
英文:
I fixed your issue by changing your docker-compose.yml to:
version: "3.8"
services:
  localstack:
    container_name: "${LOCALSTACK_DOCKER_NAME-localstack_main}"
    image: localstack/localstack
    ports:
      - "127.0.0.1:4566:4566"
    environment:
      - DEBUG=1
      - DOCKER_HOST=unix:///var/run/docker.sock
    volumes:
      - "$PWD/init-aws.sh:/etc/localstack/init/ready.d/init-aws.sh"  # ready hook
      - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"
The init-aws.sh looks like:
#!/bin/bash
awslocal dynamodb create-table \
   --table-name table-global \
   --attribute-definitions AttributeName=id,AttributeType=S \
   --key-schema AttributeName=id,KeyType=HASH \
   --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
Make sure to run chmod +x init-aws.sh on the file first.
I can validate this via the following command:
$ awslocal dynamodb list-tables
{
    "TableNames": [
        "table-global"
    ]
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论