docker - 在 docker 容器中针对 Localstack 运行 shell 脚本

标签 docker docker-compose localstack

我一直在使用 localstack 来开发针对本地的服务。我刚刚通过 docker run --rm -p 4567-4583:4567-4583 -p 8080:8080 localstack/localstack

运行他们的 docker 镜像

然后我手动运行一个小脚本来设置我的 S3 存储桶、SQS 队列等。

现在,我想让其他人更容易做到这一点,所以我想我只需添加一个 Dockerfile 和 docker-compose.yml 文件。不幸的是,当我尝试启动并运行它时,使用 docker-compose up 我收到一个错误,即我的安装脚本中的命令无法连接到 localstack 服务。

make_bucket failed: s3://localbucket Could not connect to the endpoint URL: "http://localhost:4572/localbucket"

Dockerfile:

FROM localstack/localstack

#since this is just local dev set up, localstack doesn't require 
anything specific here.
ENV AWS_DEFAULT_REGION='[useast1]'
ENV AWS_ACCESS_KEY_ID='[lloyd]'
ENV AWS_SECRET_ACCESS_KEY='[christmas]'

COPY bin/localSetup.sh /localSetup.sh
COPY fixtures/notifications.json /notifications.json
RUN ["chmod", "+x", "/localSetup.sh"]
RUN pip install awscli

# expose service & web dashboard ports
EXPOSE 4567-4582 8080

ENTRYPOINT ["/localSetup.sh"]

docker-compose.yml

version: '3'
services:
  localstack:
    build: .
    ports:
      - "8080:8080"
      - "4567-4582:4567-4582"

localSetup.sh

#!/bin/bash

aws --endpoint-url=http://localhost:4572 s3 mb s3://localbucket
#additional similar calls but left off for brevity

我尝试在我的脚本命令中将 localhost 切换为 127.0.0.1,但最终还是遇到了同样的错误。我可能在这里遗漏了一些愚蠢的东西。

最佳答案

create your custom AWS resources when localstack freshly starts up. 还有另一种方法 由于您已经有一个用于资源的 bash 脚本,因此您可以简单地将脚本卷挂载到 /docker-entrypoint-initaws.d/。 所以我的 docker-compose 文件是:

localstack:
    image: localstack/localstack:latest
    container_name: localstack_aws
    ports:
      - '4566:4566'
    volumes:
      - './localSetup.sh:/etc/localstack/init/ready.d/init-aws.sh'

另外,我更喜欢 bash 脚本中的 awslocal 而不是 aws --endpoint,因为它为您利用凭据工作和端点。

关于docker - 在 docker 容器中针对 Localstack 运行 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53563942/

相关文章:

docker - 群集集群领事设置

docker - JAVA_OPTS/CATALINA_OPTS 参数不适用于 docker-compose.yml

wordpress - 强制 Docker 在主机而不是 guest 中挂载代码卷

java - LocalStack 无法通过 Java 中的 AWS SES SDK 模拟发送电子邮件端点

Docker Golang SDK - 如何将容器标准输出重定向到文件

docker - 如何刷新容器链接

docker - 如何在 docker 容器中运行 cron 作业?

docker - Docker-Compose:Tomcat应该等待启动直到(My)SQL Dump准备就绪

amazon-web-services - 使用 localstack 运行 lambda 函数

java - 配置 java AWS sdk 客户端写入本地 S3 存储桶 (localstack)