#javascript #networking #openwhisk
#javascript #сеть #openwhisk
Вопрос:
Я настроил локальный экземпляр openwhisk, работающий в docker, используя openwhisk-devtools. Я создал действие, которое пытается подключиться к API на моем компьютере, работающем на порту 8081. Код выглядит примерно так:
import axios from 'axios';
async function main () {
let response = null;
try {
response = await axios.get('http://localhost:8081/api/health-check');
} catch (error) {
return {
payload: {
error: error
}
}
}
return {
payload: {
headers: response.headers
}
};
}
global.main = main;
Ошибка, которую я получаю,:
{
"code": "ECONNREFUSED",
"config": {
"headers": {
"Accept": "application/json, text/plain, */*",
"User-Agent": "axios/0.20.0"
},
"maxBodyLength": -1,
"maxContentLength": -1,
"method": "get",
"timeout": 0,
"transformRequest": [
null
],
"transformResponse": [
null
],
"url": "http://localhost:8081/api/health-check",
"xsrfCookieName": "XSRF-TOKEN",
"xsrfHeaderName": "X-XSRF-TOKEN"
},
"message": "connect ECONNREFUSED 127.0.0.1:8081",
"name": "Error",
"stack": "Error: connect ECONNREFUSED 127.0.0.1:8081n at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)"
}
Я предполагаю, что это связано с тем, что localhost указывает на любой контейнер docker, выполняющий действие. Как я могу отправить этот запрос на мой компьютер разработчика?
Комментарии:
1. Эта статья должна помочь вам получить доступ к хосту из вашего контейнера docker: dev.to/bufferings/access-host-from-a-docker-container-4099
2. Я прочитал эту статью,
host.docker.internal
решает127.0.0.1:80
. Поэтому я попытался просто запросить127.0.0.1:8081
, что привело к отказу от ECONNREFUSED. Что касается включенияhost
сетевого режима docker, я взглянул наopenwhisk-devtools/docker-compose/docker-compose.yml
и я не уверен, какую конфигурацию службы следует изменить.
Ответ №1:
После печати значения process.env
я нашел свойство:
"__OW_API_HOST": "https://192.168.2.61",
Сначала я не был уверен, что это такое, но я попробовал запрос здесь, и он сработал:
axios.get('http://192.169.2.61:8081/api/health-check')
Так что, возможно process.env.__OW_API_HOST
, содержит IP-адрес, указывающий на ваш локальный компьютер, который вы можете использовать.