【问题标题】:Connect Docker Containers: Frontend to GraphQL Backend via Docker Compose on the same Host连接 Docker 容器:前端通过同一主机上的 Docker Compose 连接到 GraphQL 后端
【发布时间】:2017-12-07 18:47:27
【问题描述】:

假设我在运行 2 个容器/服务的 docker-compose 主机上:

  • 后端 graphql(端口:8000:8000)
  • 前端反应(端口:8081:8081)

在我的 react + apollo 代码所在的前端容器中,我需要设置这个常量:

// frontend container code
export const APOLLO = {
    uri: 'http://0.0.0.0:8000/graphql' // << not working, what to use here?
};

但是,uri 值无法成功连接到后端 graphql 端点。我收到了诸如Error Network error: request to http://0.0.0.0:8000/graphql failed, reason: connect ECONNREFUSED 0.0.0.0:8000之类的错误消息

这些容器本身就可以正常工作。我可以导航到http://0.0.0.0:8000http://0.0.0.0:8000/graphqlhttp://0.0.0.0:8081 与他们单独互动。我还可以使用ping backendping frontend 进入每个容器并通过它们的服务名称空间到达另一个容器。

但是,当我在代码中执行 uri: 'http://backend:8000/graphql'uri: 'http://backend/graphql' 时,我收到错误 Error Network error: only absolute urls are supported

docker inspect backend 上,我得到后端容器的 IP 地址为:'172.18.0.5'。我试图以uri: 'http://172.18.0.5/graphql' 插入uri,但我得到Error Network error: Network request failed with status 403 - "Forbidden"

在给定这些场景的情况下,我应该如何在代码中将后端 docker 容器连接到前端?

谢谢!

【问题讨论】:

  • 添加docker-compose.yml、Docker 版本、主机操作系统和任何支持的外部文件,以便我们重现。

标签: docker docker-compose graphql


【解决方案1】:

通过在本地运行服务器而不是 Docker 来修复它,发现由于未设置 CORS 标头,后端拒绝前端条目。将前端的 ip 列入白名单,并且可以正常工作。在后端 ip http://172.18.0.5/graphql 的 Docker 容器中再次测试,连接完美。

希望这会有所帮助!

编辑:在 url 主机名中引用容器名称,即 http://backend/graphql 也可以使用 docker compose 设置的 docker 网桥。这比硬编码上面的 docker 容器 ip 更好。

【讨论】:

    【解决方案2】:

    这是当 node-fetch 无法访问协议或主机名时发生的问题

    https://github.com/bitinn/node-fetch/blob/e2603d31c767cd5111df2ff6e2977577840656a4/src/request.js#L125

    if (!parsedURL.protocol || !parsedURL.hostname) {
        throw new TypeError('Only absolute URLs are supported');
    }
    

    根据您的 graphql 后端处理查询的方式,最好注销每个服务端点的 URL,并确保 URL 包含主机 AND 协议,否则提取将失败。

    对于我自己来说,当我的主机变量从我的服务端点的 ENV 返回为 undefined 时,我发生了错误。

    【讨论】:

      猜你喜欢
      • 2022-10-06
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 2020-08-14
      • 2015-01-07
      • 2017-07-10
      • 1970-01-01
      相关资源
      最近更新 更多