GuzzleHttp 抛出 ConnectExpection cURL 错误 6:无法解析主机:<localhostname>

GuzzleHttp throws ConnectExpection cURL error 6: Could not resolve host: <localhostname>

我知道有很多关于此的问题,但我似乎找不到自己的答案。

我有一个 LoginControllerauthenticate() 方法来处理登录过程。

public function authenticate()
{
    $email = $_POST['email'];
    $password = $_POST['password'];

    if (Auth::attempt(['email' => $email, 'password' => $password])) {
        $http = new \GuzzleHttp\Client([
            'base_uri' => 'http://myapp.test'
        ]);

        $response = $http->post('oauth/token', [
            'form_params' => [
                'grant_type' => 'password',
                'client_id' => '2',
                'client_secret' => '_hashed-secret_',
                'username' => $email,
                'password' => $password,
                'scope' => ''
            ]
        ]);

        return json_decode((string) $response->getBody(), true);
    }
}

我得到 cURL error 6: Could not resolve host: myapp.test (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)。我已经重新启动了我的服务器,但没有任何反应。我重建了所有容器(目前使用 laradock),但什么也没有。

奇怪的是,它只出现在第一次尝试登录时。所以,当客户端尝试登录时,出现error,但当客户端重新发送表单数据(F5)时,它消失了,客户端被重定向到首页,这表明客户端是已登录。

我还重新配置了我的 .env 和其他包含 hostname 的配置(之前是 localhost,更改为 myapp.test)但无法修复 error.

如有任何帮助,我们将不胜感激。提前致谢。

好的,我已经想通了。在 docker-compose.yml 文件上添加一些配置。

### PHP-FPM Container #######################################
...
extra_hosts:
  - "dockerhost:${DOCKER_HOST_IP}"
  - "myapp.test:${DOCKER_HOST_IP}"
networks:
  - frontend
  - backend
  - webserver_network
...
### NGINX Server Container ##################################
networks:
  #- frontend
  #- backend
  webserver_network:
    ipv4_address: ${WEBSERVER_IP}
  frontend:
  backend:
...
### Networks Setup ############################################
webserver_network:
  driver: "bridge"
  config:
    - subnet: "${WEBSERVER_SUBNET}"
      gateway: "${WEBSERVER_GATEWAY}"

然后,重建php-fpm容器。并且成功了。谢谢