запрос api на localhost из локального действия openwhisk

#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-адрес, указывающий на ваш локальный компьютер, который вы можете использовать.