【发布时间】:2018-08-04 02:08:04
【问题描述】:
我有多个 Java spring boot 服务(其中大约 20 个)使用 Amazon SDKs for S3、SQS、DynamoDB 等。
目前,要使用 Amazon Web Service,我只需要指定我的 AWS 密钥和密码。
ACCESS_AWS_KEY=<MY_KEY>
ACCESS_AWS_SECRET=<MY_SECRET>
但是,我想设置离线开发环境,所以我开始对我的服务进行 docker 化,并设置一个单一的多 docker 容器,其中我的所有服务都已 docker 化,并且应该使用 localstack 而不是远程 AWS 服务以允许完整的离线开发.
docker-compose.yml 看起来像这样
version: '3'
services:
service_1:
build: ./repos/service_1
links:
- service_2:
- localstack
service_2:
build: ./repos/service_2
links:
- localstack
service_3:
build: ./repos/service_3
links:
- localstack
localstack:
image: localstack/localstack
Amazon SDK 提供 AWS_REGION 环境变量,但不是我可以在所有服务中轻松使用的端点环境变量。
我也不想在我的服务中更改代码以适应新的非默认端点。
我想要一个通用的解决方案来转发这样的请求:
dynamodb.eu-west-1.amazonaws.com => localstack_1:4569
s3-eu-west-1.amazonaws.com => localstack_1:4572
其中 localstack_1 是 localstack 的链接 docker 容器,其他容器可以访问。
我在 docker-compose 中遇到了extra_hosts:,但它只重定向到 IP,没有主机名解析。
另外,请注意我在 localstack 中暴露了从 4569 到 4582 的几十个端口。
我想过在每台机器上运行一个脚本,以某种方式设置一个虚拟主机,或者将所有容器的所有传出连接转发到一个集中的请求转发器服务,但不知道从哪里开始。
这将仅用作离线开发环境,不会接收任何实际流量。
【问题讨论】:
-
我也有同样的问题。我有几个使用 moto 的服务的 docker 容器(localstack 基于),我必须为每个服务指定端点 URL。我最终使用
direnv并将环境变量设置为mock_*:5000 的URL,例如sqs 将是mock_sqs:5000。由于我在其他容器上进行测试并且端口是公开的,因此我实际上不需要将端口映射到我的本地主机,尽管我还是这样做了。 -
您是否找到了解决方案,因为看起来我陷入了同一个陷阱? :)
-
您找到解决方案了吗?
-
在下面查看我的解决方案 :)
标签: docker docker-compose hosts dnsmasq localstack