Контейнер Docker, работающий в Virtualbox, не может сделать XHR-запрос к ресурсу в сети рабочего места - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь написать плагин для WordPress и разрабатываю с использованием Local by Flywheel.Это программное обеспечение в основном создает виртуальную машину для себя с необходимыми настройками, предварительно настроенными для PHP и MySQL.Затем он запускает два док-контейнера внутри этой виртуальной машины.Один для Nginx, а другой неясен.

Когда я открываю свой браузер, я могу развиваться на своем экземпляре WordPress.

Я пытаюсь создать плагин, который проходит черезOAuth поток.Чтобы сделать это, он должен уметь выполнять типичные шаги, которые требует OAuth, используя некоторые конечные точки.Когда я проверяю свои журналы PHP, я нахожу ошибку:

[08-May-2019 14:42:42 UTC] Response Code ""
[08-May-2019 14:42:42 UTC] Headers []
[08-May-2019 14:42:42 UTC] Body ""
[08-May-2019 14:42:42 UTC] Response successful: {"errors":{"http_request_failed":["A valid URL was not provided."]},"error_data":[]}

Для следующего кода:

function cm_sso_token_swap(WP_REST_Request $request)
{
    $authCode = $request->get_param('code');
    $tokenSwapResponse = wp_safe_remote_post(CM_SSO_TOKEN_ENDPOINT, array(
        'timeout' => 15,
        'headers' => array('content-type' => 'multipart/form-data'),
        'body' => array(
            'grant_type' => CM_SSO_GRANT_TYPE,
            'code' => $authCode,
            'redirect_uri' => $redirect_uri,
            'client_id' => $client_id,
            'client_secret' => $client_secret,
        ),
    ));

    var_dump($tokenSwapResponse);

    if (is_wp_error($tokenSwapResponse) || !strpos($tokenSwapResponse['body'], "SUCCESS") === 0) {
        error_log($tokenSwapResponse->get_error_message());
        error_log('Response Code ' . json_encode(wp_remote_retrieve_response_code($tokenSwapResponse)));
        error_log('Headers ' . json_encode(wp_remote_retrieve_headers($tokenSwapResponse)));
        error_log('Body ' . json_encode(wp_remote_retrieve_body($tokenSwapResponse)));
    }

    error_log('Response successful: ' . json_encode($tokenSwapResponse));

    return new WP_REST_Response(json_encode($request->get_params()));
}

Независимо от того, какую конечную точку я использую.Я также проверил проблему, пытаясь отправить сообщение на наш общедоступный веб-сайт, который возвращается нормально.Но затем отправка сообщения в совершенно не связанное внутреннее приложение возвращает ту же ошибку.

Это заставляет меня поверить, что контейнер / виртуальная машина Docker не настроен с соответствующим внутренним DNS, с которым настроен мой хост-компьютер.

Я могу получить exec в оболочке виртуальной машины, а также в самих контейнерах докеров.

Смогу ли я запустить контейнеры Docker в оболочке VM таким образом, чтобы у них были правильные серверы имен?Это так же просто, как настройка сети в меню виртуальной машины?Я не уверен, где и что мне нужно сделать, чтобы мои XHR могли распознавать эти внутренние конечные точки!

...