无法连接到 Windows 10 计算机上的 Localstack docker 实例 - 无法找到凭据

Pur*_*ome 7 amazon-web-services docker localstack

我正在尝试在 Windows 10 计算机上试验Localstack 。

  • 我希望使用localstack/localstack docker 镜像。
  • 我还希望使用amazon/aws-cli docker 映像针对我的 Localstack 实例运行命令。(例如创建一个S3存储桶)。
  • 不想在我的 Windows 机器安装 python/pip。
  • 不想在我的 Windows 计算机上安装 aws - cli (注意:我想将 docker 映像用于 aws-cli 命令。)

所以我似乎 Localstack 运行正常,但是当我尝试对 Localstack 实例运行 AWS 命令​​时,出现错误Unable to locate credentials

例如

CMD > docker run --rm -it amazon/aws-cli --endpoint-url=http://localhost:4566 s3 mb s3://testbucket
make_bucket failed: s3://testbucket Unable to locate credentials
Run Code Online (Sandbox Code Playgroud)

和我的泊坞窗文件:

version: '3.2'

services:
  
  localstack:
    image: localstack/localstack # This will pull the latest
    container_name: localstack
    network_mode: bridge
    ports:
      - 4566:4566 # All servics will now go through the same port.
      - "4571:4571"
      - "${PORT_WEB_UI-8080}:${PORT_WEB_UI-8080}"
    environment:
      - SERVICES=s3
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data # This is the where the data will be stored/saved, inside the docker instance
      - PORT_WEB_UI=${PORT_WEB_UI- }
    volumes:
      - "localstack-vol:/tmp/localstack"

volumes:
  localstack-vol:
Run Code Online (Sandbox Code Playgroud)

问题

aws-cli是否可以从Docker 映像针对 Localstack 实例运行 AWS 命令​​(例如创建 S3 存储桶) ?

有没有办法可以指定凭据?

我还有一个包含以下内容的文件C:\Users\<username>\.aws configcredentials

Credentials

[<snip>]
aws_access_key_id=<snip>
aws_secret_access_key=<snip>

[localstack]
aws_access_key_id = foo
aws_secret_access_key = bar


config
[profile <snip>]
region = us-west-2
role_arn = arn:aws:iam::<snip>:role/local-development
source_profile = <snip>

[profile localstack]
region = us-west-2
output = json

Run Code Online (Sandbox Code Playgroud)

有人可以看看我做错了什么吗?

Pur*_*ome 9

@marcin的帮助下,我能够运行它:

要求:

创建 docker-compose.yml 文件

version: '3.5'

services:
  localstack:
    image: localstack/localstack # This will pull the latest
    container_name: localstack
    network_mode: bridge
    ports:
      - 4566:4566 # All servics will now go through the same port.
      - "${PORT_WEB_UI-8080}:${PORT_WEB_UI-8080}"
    environment:
      - SERVICES=s3,sns,sqs
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data # This is the where the data will be stored/saved, inside the docker instance
      - PORT_WEB_UI=${PORT_WEB_UI- }
    volumes:
      - "localstack-vol:/tmp/localstack"

volumes:
  localstack-vol:
Run Code Online (Sandbox Code Playgroud)

注意:注意容器的名称:localstack。我们稍后会提到这一点(当链接第二个 Docker 实例时,回到这一点)。

然后在命令行中运行以下命令:

> docker-compose up
Run Code Online (Sandbox Code Playgroud)

好的,在新的命令行中(因为我喜欢看到实例运行的输出):

> docker run --rm -it amazon/aws-cli --version

aws-cli/2.1.21 Python/3.7.3 Linux/4.19.128-microsoft-standard docker/x86_64.amzn.2 prompt/off
Run Code Online (Sandbox Code Playgroud)

所以 aws-cli 在本地主机上工作:还没有什么特别的。

针对我们的 localstack 实例运行 aws-cli 命令

如果您注意到上面的内容,我只启动了以下服务:

  • S3
  • 社交网络服务
  • 质量安全体系

因此,让我们确保我们可以为每一个创建然后列出一些内容。

### Create an S3 Bucket, then list buckets
docker run --rm -it --link localstack amazon/aws-cli --no-sign-request --endpoint-url=http://localstack:4566 s3 mb s3://mytestbucket
docker run --rm -it --link localstack amazon/aws-cli --no-sign-request --endpoint-url=http://localstack:4566 s3 ls

### Create a Topic then list topics
docker run --rm -it --link localstack amazon/aws-cli --no-sign-request --endpoint-url=http://localstack:4566 sns create-topic --name test-topic
docker run --rm -it --link localstack amazon/aws-cli --no-sign-request --endpoint-url=http://localstack:4566 sns list-topics

### Create a Queue and list queues
docker run --rm -it --link localstack amazon/aws-cli --no-sign-request --endpoint-url=http://localstack:4566 sqs create-queue --queue-name testqueue
docker run --rm -it --link localstack amazon/aws-cli --no-sign-request --endpoint-url=http://localstack:4566 sqs list-queues

Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

最后,如果您希望连接到 aws-cli Docker 实例以在其中运行命令(例如,某些奇怪的东西不起作用),请使用以下命令:

> docker run --rm -it --entrypoint /bin/bash --link localstack amazon/aws-cli
Run Code Online (Sandbox Code Playgroud)

我不得不覆盖默认值entrypoint。相反,我是说:“输入”实例并运行此 shell (bin/bash),然后让我现在运行命令,就像我登录到实例一样。