Итак, у меня есть 3 контейнера на одном экземпляре EC2: Nodejs, DB и Flask. Nodejs отлично соединяется с контейнером БД, и все маршруты работают. Есть один маршрут от Nodejs, который ведет к фляге, которая выдает «внутреннюю ошибку сервера». Я использую сетевой режим «host» в определении задачи, и соединение между контейнерами может быть достигнуто с помощью «localhost: xxxx».
Почтовый запрос отправляет файл изображения и возвращает json в качестве ответа.
Тот же маршрут работает нормально и дает правильный результат, когда я тестирую из своей локальной сети: т. Е. Контейнер Node при локальной маршрутизации в контейнер Flask на AWS EC2.
Я не понимаю, в чем может быть проблема на стороне EC2, но с локального работает нормально. Все входящие правила верны. Узел находится на порту 3000 Фласк находится на порту 5000
код на узле, который подключается к flask api:
form.append('image', fs.createReadStream(path.join(path.resolve(''),'/assets/images', image.filename)));
/**Redirect to flask API with image fileand delete from local*/
const urlProxy = new Proxy(redirectMapping, validator);
const response = await fetch(urlProxy.predict, { method: 'POST', body: form });
const flaskData = await response.json();
await unlink(path.join(path.resolve(''),'/assets/images', image.filename))
Вот мои определения контейнеров в task-definition.yaml:
"containerDefinitions": [
{
"name": "KlemFlask",
"image": "klemrepo:latest",
"cpu": 0,
"memoryReservation": 128,
"portMappings": [
{
"containerPort": 5000,
"hostPort": 5000,
"protocol": "tcp"
}
],
"essential": true,
"environment": [],
"mountPoints": [],
"volumesFrom": []
}
},
{
"name": "klemweb",
"image": "klemtech/node-prod",
"cpu": 0,
"memoryReservation": 50,
"portMappings": [
{
"containerPort": 3000,
"hostPort": 3000,
"protocol": "tcp"
}
],
"essential": true,
"environment": [],
"environmentFiles": [
{
"value": "klempgdata/node.env",
"type": "s3"
}
],
"mountPoints": [],
"volumesFrom": [],
"dependsOn": [
{
"containerName": "klemdb",
"condition": "START"
}
]
},
{
"name": "klemdb",
"image": "postgres:14-alpine",
"cpu": 0,
"memoryReservation": 50,
"portMappings": [
{
"containerPort": 5432,
"hostPort": 5432,
"protocol": "tcp"
}
],
"essential": true,
"environment": [],
"environmentFiles": [
{
"value": "klempgdata/database.env",
"type": "s3"
}
],
"mountPoints": [
{
"sourceVolume": "pgdata",
"containerPath": "/var/lib/postgresql/data"
}
],
"volumesFrom": []
}
@ryanwebjackson добавил определения контейнеров из моего определения задачи. даны сопоставления портов, а сетевой режим, который я использую, - хост
Сообщение «внутренняя ошибка сервера» может указывать на проблему с кодом или конфигурацией контейнера Flask. Можете ли вы проверить журналы контейнера Flask, чтобы увидеть, есть ли какие-либо сообщения об ошибках, которые могут помочь определить проблему?
Спасибо, ребята, настоящая проблема заключалась в правах доступа к рабочему каталогу в контейнере узлов. Изменение разрешений решило проблему.
Спасибо, ребята, настоящая проблема заключалась в правах доступа к рабочему каталогу в контейнере узлов. Изменение разрешений решило проблему
Можете ли вы поделиться спецификацией сети Docker? Dockerfiles и/или YAML