在Virtualbox上运行的Docker容器无法向工作场所网络中的资源发出XHR请求

时间:2019-05-08 16:19:21

标签: docker networking dns virtualbox

我正在尝试编写WordPress插件,并且正在使用Flywheel进行本地开发。该软件基本上为自己创建了一个虚拟机,并为PHP和MySQL预配置了必要的设置。然后,它在该VM中启动两个docker容器。一个用于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()));
}

无论我使用哪个端点。我还尝试通过POST到我们面向公众的网站来验证该问题,该网站可以正常运行。但是随后发布到一个完全不相关的内部应用程序会返回相同的错误。

这使我相信Docker容器/ VM未配置有配置主机的适当内部DNS。

我能够使exec进入VM的外壳以及docker容器本身。

我是否能够以具有正确名称服务器的方式在VM Shell中运行Docker容器?它和VM菜单中的网络设置一样简单吗?我不确定要在何处或做什么使我的XHR能够识别这些内部端点!

0 个答案:

没有答案