【发布时间】:2019-01-15 11:18:56
【问题描述】:
我正在 docker 上尝试一个小型 POC(学习实验)。我有 3 个 docker 图像,一个用于店面、一个搜索引擎和一个分别称为 storefront、solr、docmysql 的数据库引擎。我已经尝试在 ec2 上的 docker swarm(在单个节点上)中运行它们,并且效果很好。
在 POC 中,接下来我需要在单个非 Amazon ECS-Optimized AMI 上使用 EC2 启动类型将此移动到 AWS ECS。我已经为此安装并启动了一个 ecs-agent。我为在任务中配置为容器的 3 个图像中的每一个创建了 3 个服务和一个任务。问题是关于从店面连接到数据库。
店面有一个属性文件,其中数据库连接通常定义为
"jdbc:mysql://docmysql/hybris64?useConfigs=maxPerformance&characterEncoding=utf8&useSSL=false".
当我将它作为 docker swarm 运行时,这很有效。将其移至 ECS(EC2 启动类型)后,我必须从我的任务/容器中为 docmysql 服务公开端口 3306。这给了我一个 docmysql.local 的服务端点,“local”是一个私有命名空间。我尝试将连接字符串更改为
"jdbc:mysql://docmysql.local/hybris64?useConfigs=maxPerformance&characterEncoding=utf8&useSSL=false"
在属性文件中,它总是以“名称或服务未知”失败。我的连接字符串应该是什么?创建服务后,我在 Route 53 中看到 2 个条目,一个 SRV 记录和一个 A 记录。 A 记录的名称为 .docmysql.local,如果我在数据库连接字符串中使用它,我会看到它可以工作,但显然与 hadcoded taskid 不正确。我已经阅读了 AWS Cloud Map (servicediscovery) 但仍然不太清楚如何去做。我不会在服务中的数据库任务前面放置任何负载均衡器,数据库始终只有一项任务。
那么生成有效的连接字符串的最佳方法是什么。还有为什么当我将它作为 docker swarm 运行时没有问题。
我知道我可以使用 RDS 而不是说明我自己的数据库,我会尝试这样做,但现在需要这个工作,因为我已经开始使用它。感谢您的帮助。
【问题讨论】:
标签: mysql docker amazon-ecs service-discovery