【发布时间】:2018-09-09 19:29:27
【问题描述】:
我正在使用 AWS ECS,并为我的前端(Node 应用程序)和后端(mongo 数据库)提供了一个容器。
mongo 容器正在暴露端口 27017,但我不知道如何从我的前端容器连接到它。如果我尝试使用 'mongodb://localhost:27017/db_name' 连接到数据库,我会收到 ECONNREFUSED 错误。
我有一个为这两个任务定义运行的服务,前端有一个 ALB。我没有将它们放在同一个任务定义中,因为将它们一起扩展似乎不是最佳选择。
我已经尝试了多种 url 变体
- mongodb://0.0.0.0:27017/db_name
- mongodb://localhost:27017/db_name
如果我从 EC2 实例中“卷曲”mongo 容器,我会收到来自服务器的空回复。
数据库任务定义:
{
"executionRoleArn": null,
"containerDefinitions": [
{
"dnsSearchDomains": null,
"logConfiguration": null,
"entryPoint": null,
"portMappings": [
{
"hostPort": 27017,
"protocol": "tcp",
"containerPort": 27017
}
],
"command": null,
"linuxParameters": null,
"cpu": 0,
"environment": [
{
"name": "MONGODB_ADMIN_PASS",
"value": <PASSWORD>
},
{
"name": "MONGODB_APPLICATION_DATABASE",
"value": <DB NAME>
},
{
"name": "MONGODB_APPLICATION_PASS",
"value": <PASSWORD>
},
{
"name": "MONGODB_APPLICATION_USER",
"value": <USERNAME>
}
],
"ulimits": null,
"dnsServers": null,
"mountPoints": [],
"workingDirectory": null,
"dockerSecurityOptions": null,
"memory": null,
"memoryReservation": 128,
"volumesFrom": [],
"image": "registry.hub.docker.com/library/mongo:latest",
"disableNetworking": null,
"healthCheck": null,
"essential": true,
"links": null,
"hostname": null,
"extraHosts": null,
"user": null,
"readonlyRootFilesystem": null,
"dockerLabels": null,
"privileged": null,
"name": "mongo"
}
],
"placementConstraints": [],
"memory": null,
"taskRoleArn": null,
"compatibilities": [
"EC2"
],
"taskDefinitionArn": "arn:aws:ecs:us-east-2:821819063141:task-definition/dappy_coin_database:2",
"family": "dappy_coin_database",
"requiresAttributes": [
{
"targetId": null,
"targetType": null,
"value": null,
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.21"
}
],
"requiresCompatibilities": null,
"networkMode": null,
"cpu": null,
"revision": 2,
"status": "ACTIVE",
"volumes": []
}
【问题讨论】:
-
仅仅因为 mongo 暴露了该端口并不意味着 mongo 运行的容器暴露了该端口。你的配置是什么样的?
-
不确定这是否是您需要的,但我将包含 mongo 容器的任务定义 JSON 放在 post 中
-
Mongo 需要绑定正确的 IP 和端口,并且容器需要公开该端口(如果您使用的是 EC2,那也需要公开该端口)。
-
在 "docker ps" 中,它在 Mongo 容器上显示 0.0.0.0:27017->27017/tcp。此外,安全组似乎正在工作,因为它们没有超时问题,并且我暴露了端口
-
为什么连接 URL 中有
http?你有http interface running 吗?您尝试从哪里连接到环回 IP?
标签: node.js mongodb amazon-web-services docker amazon-ecs