【发布时间】:2022-05-20 00:48:25
【问题描述】:
在我的 docker-compose 中使用 localstack 主要是为了模仿 S3。
我知道我可以创建存储桶,这不是问题。我想做的是在运行 docker-compose up 时自动创建存储桶。
是否已经为 localstack 内置了一些东西?
【问题讨论】:
标签: amazon-s3 docker-compose localstack
在我的 docker-compose 中使用 localstack 主要是为了模仿 S3。
我知道我可以创建存储桶,这不是问题。我想做的是在运行 docker-compose up 时自动创建存储桶。
是否已经为 localstack 内置了一些东西?
【问题讨论】:
标签: amazon-s3 docker-compose localstack
自版本 0.10.0 以来,此 commit 带来的更改。
容器第一次启动时,会执行文件 扩展名为 .sh,可在
/docker-entrypoint-initaws.d中找到。 文件将按字母顺序执行。您可以轻松创建 使用 awslocal(或 aws)cli 工具在 localstack 上的 aws 资源 初始化脚本。
version: '3.7'
services:
localstack:
image: localstack/localstack
environment:
- SERVICES=s3
ports:
- "4566:4566"
# - "4572:4572" Old S3 port
volumes:
- ./aws:/docker-entrypoint-initaws.d
在目录./aws/buckets.sh中有一个脚本:
#!/usr/bin/env bash
set -x
awslocal s3 mb s3://bucket
set +x
注意:set [-/+] x 纯粹是用来打开和关闭正在执行的命令的输出。
将产生这个输出:
...
localstack_1 | Starting mock S3 (http port 4572)...
localstack_1 | Waiting for all LocalStack services to be ready
localstack_1 | Ready.
localstack_1 | /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initaws.d/buckets.sh
localstack_1 | ++ awslocal s3 mb s3://bucket
localstack_1 | make_bucket: bucket
localstack_1 | ++ set +x
localstack_1 |
【讨论】:
mb 和 s3 是错误的方式!应该是awslocal s3 mb s3://bucket。不过感谢您的回答,为我省去了很多麻烦!
docker-entrypoint-initaws.d 及其内容(.sh 脚本)在哪里?我已经尝试在/usr/local/bin/ 和/opt/code/localstack/ 中创建它,但它看起来不像.sh 脚本在容器启动时运行。
/docker-entrypoint-initaws.d,因此./aws/buckets.sh将是/docker-entrypoint-initaws.d/buckets.sh,基于上面的配置。
test: "awslocal s3api head-bucket --bucket bucket"
我能够通过 Localstack 通过某种“解决方法”实现这一点:
创建预期的存储桶,例如:
aws --endpoint-url=http://localhost:4572 s3 mb s3://test1
s3_api_calls.json 文件(在 Linux 上默认为
/tmp/localstack/data
/tmp/localstack/data)2019-03-21T08:38:28:INFO:localstack.utils.persistence: Restored 2 API calls from persistent file: /tmp/localstack/data/s3_api_calls.json 的内容,并且存储桶应该可用:aws --endpoint-url=http://localhost:4572 s3 ls s3://test1
【讨论】:
DATA_DIR:用于保存持久数据的本地目录(目前仅支持以下服务:Kinesis、DynamoDB、Elasticsearch、S3)
【讨论】: