我正在将我工作的公司的部分基础设施迁移到 Amazon ECS,并且我一直试图让我的服务器容器连接到数据库容器。
下面是我如何在我的任务中设置它:
{
"requiresAttributes": [
{
"value": null,
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.17",
"targetId": null,
"targetType": null
},
{
"value": null,
"name": "com.amazonaws.ecs.capability.logging-driver.syslog",
"targetId": null,
"targetType": null
},
{
"value": null,
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.18",
"targetId": null,
"targetType": null
},
{
"value": null,
"name": "com.amazonaws.ecs.capability.ecr-auth",
"targetId": null,
"targetType": null
}
],
"taskDefinitionArn": "arn:aws:ecs:us-east-1:9621234232917455:task-definition/ecv-server:12",
"networkMode": "bridge",
"status": "ACTIVE",
"revision": 12,
"taskRoleArn": null,
"containerDefinitions": [
{
"volumesFrom": [],
"memory": 500,
"extraHosts": null,
"dnsServers": [],
"disableNetworking": null,
"dnsSearchDomains": null,
"portMappings": [],
"hostname": "db",
"essential": true,
"entryPoint": null,
"mountPoints": [
{
"containerPath": "/var/lib/postgresql/data",
"sourceVolume": "dbdata",
"readOnly": null
}
],
"name": "db",
"ulimits": null,
"dockerSecurityOptions": null,
"environment": [
{
"name": "POSTGRES_PASSWORD",
"value": "jmbrito"
},
{
"name": "POSTGRES_USER",
"value": "jmbrito"
}
],
"links": [],
"workingDirectory": null,
"readonlyRootFilesystem": null,
"image": "postgres",
"command": null,
"user": null,
"dockerLabels": null,
"logConfiguration": {
"logDriver": "syslog",
"options": null
},
"cpu": 0,
"privileged": null,
"memoryReservation": null
},
{
"volumesFrom": [],
"memory": 400,
"extraHosts": null,
"dnsServers": [],
"disableNetworking": null,
"dnsSearchDomains": null,
"portMappings": [],
"hostname": "redis",
"essential": true,
"entryPoint": null,
"mountPoints": [
{
"containerPath": "/data",
"sourceVolume": "redisdata",
"readOnly": null
}
],
"name": "redis",
"ulimits": null,
"dockerSecurityOptions": null,
"environment": [],
"links": null,
"workingDirectory": null,
"readonlyRootFilesystem": null,
"image": "redis:3.2-alpine",
"command": [
"redis-server"
],
"user": null,
"dockerLabels": null,
"logConfiguration": {
"logDriver": "syslog",
"options": null
},
"cpu": 0,
"privileged": null,
"memoryReservation": null
},
{
"volumesFrom": [],
"memory": 600,
"extraHosts": null,
"dnsServers": null,
"disableNetworking": null,
"dnsSearchDomains": null,
"portMappings": [
{
"hostPort": 80,
"containerPort": 3000,
"protocol": "tcp"
}
],
"hostname": null,
"essential": true,
"entryPoint": [],
"mountPoints": [],
"name": "server",
"ulimits": null,
"dockerSecurityOptions": null,
"environment": [
{
"name": "RAILS_ENV",
"value": "production"
}
],
"links": [
"db:db",
"redis:redis"
],
"workingDirectory": "/usr/src/app",
"readonlyRootFilesystem": null,
"image": "MY DOCKER LINK IN ECR",
"command": [
"sh",
"deploy/init.sh"
],
"user": null,
"dockerLabels": null,
"logConfiguration": {
"logDriver": "syslog",
"options": null
},
"cpu": 0,
"privileged": null,
"memoryReservation": null
}
],
"placementConstraints": [],
"volumes": [
{
"host": {
"sourcePath": null
},
"name": "dbdata"
},
{
"host": {
"sourcePath": null
},
"name": "redisdata"
}
],
"family": "ecv-server"
}
如您所见,我正确设置了链接字段,当我尝试使用连接到主机 db 或主机 redis 之类的名称进行连接时,它找不到它。
我尝试使用 VPC 地址连接到其他容器并且它有效。唯一的问题是,我更喜欢在 VPC 中设置自己的地址(比如将 172.13.0.2 设置为 db),因为当我不设置时,系统会按连接顺序获取地址。
我希望你明白这个问题。
谢谢你。