无法使用 Docker Compose 提供的 Drupal 应用从 API 获取或 post 数据

Cannot get or post data from API with Drupal app served with Docker Compose

我有一些应用程序 运行在本地通过。 docker 用于开发。 2 天前他们工作正常,但昨天出现了一个错误。我使用 curl 从远程主机上的 API 获取数据,昨天它停止工作,现在仍然无法工作。获取数据的curl命令是

$ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, getenv('DATABASE_URL'));
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($ch, CURLOPT_VERBOSE, 0);
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
      curl_setopt($ch, CURLOPT_AUTOREFERER, true);
      curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
      curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data, '', '&'));  
      $output = curl_exec($ch)
      curl_close($ch);
      return $output;

现在 returns 出现错误,提示我没有使用 API 的权限。这当然不能告诉你太多,所以让我详细介绍一下这些应用程序。

它们是 drupal 8 应用程序,由 docker(和 docker-compose)提供服务。我检查过他们是否可以访问互联网(稍后会详细介绍),并且该应用程序与本地 mysql 服务器的连接工作正常。我已尝试重新启动 docker、重建容器以及此类标准 hack,但似乎没有任何解决办法。我有一个 laravel 应用程序在本地与 docker 一起使用,使用相同的 API,这个应用程序可以从 API 检索和 post 数据,所以问题似乎与 drupal 代码有关。虽然这可能不是真的,因为在这开始发生之前我已经尝试使用旧版本,但仍然出现同样的错误。这让我认为它也可能是 ssl 证书错误,但我还没有找到测试这个的方法。

我注意到的一些奇怪的事情:

我知道这根本不足以找出这里到底出了什么问题,但我希望有人以前可能已经看到过其中的一些问题,并给出修复问题的提示。

一如既往,如果您需要应用程序的任何特定代码或说明,请尽管询问,我很乐意提供。

更新:我忘了补充一点,该应用程序是通过 this 代理提供的,该代理一直在发挥作用。当我 运行 它时,我在我的机器上得到了应用程序“letsencrypt_ser” 运行ning,而不是在 docker 容器中,它占用了超过 100% 的 CPU(4 个核心,因此超过一个核心的价值)。此应用程序不是 运行 在远程服务器上 运行 相同的设置,所以我相信我的容器出现了严重错误。

此外,在我的 drupal 添加的 docker-compose 文件中,我们有代码

networks:
  default:
    external:
      name: webproxy

最后,将容器连接到代理。

您应该在 drupal 8 中使用 \Drupal::httpClient(); 而不是 curl(但 curl 也应该有效)。

你的 docker-compose.yml 里有什么?

你们有这样的服务吗?

    services:
      api:
        extra_hosts:
          - "my_api_hostname.local:0.0.0.0"
        networks:
          defaults:
            aliases:
              - my_api_hostname.local
      
      front:
        depends_on:
          - api
        extra_hosts:
          - "my_front_hostname.local:0.0.0.0"
        networks:
          defaults:
            aliases:
              - my_front_hostname.local

首先,我想感谢所有参与的人。在某种程度上,你们帮助我到达了现在的位置,工作的地方。

解决办法?完全格式化 ubuntu,清理磁盘并从 16.

升级到 ubuntu 20