skip to Main Content

I’m facing issues while trying to build a Docker image for my project, which uses an older version of Apollo’s rover and Node.js 14.20. Although the subgraphs build successfully, the supergraph fails during startup with connection errors.

Here is my supergraph-config.yaml:

  users:
    routing_url: http://localhost:4000/graphql
    schema:
      subgraph_url: http://localhost:4000/graphql
  projects:
    routing_url: http://localhost:4002/graphql
    schema:
      subgraph_url: http://localhost:4002/graphql
  datasets:
    routing_url: http://localhost:4001/graphql
    schema:
      subgraph_url: http://localhost:4001/graphql

And Dockerfile is

FROM node:14.21.3-bullseye

WORKDIR /app

ADD package.json .

RUN npm cache clean --force
RUN npm install
RUN npm i @apollo/rover
ADD . .
CMD ["npm", "run", "start:update-graph"]

The start:update-graph command in the package.json is defined as follows:

rover supergraph compose --config ./supergraph-config.yaml > supergraph.graphql && node -r esm index.js

Upon running, I receive the following errors indicating issues with connecting to the subgraph URLs:

2024-11-25 13:00:23 > rover supergraph compose --config ./supergraph-config.yaml > supergraph.graphql && node -r esm index.js
2024-11-25 13:00:23
2024-11-25 13:00:23 error[E038]: Encountered 3 build errors while trying to build a supergraph.
2024-11-25 13:00:23
2024-11-25 13:00:23 Caused by:
2024-11-25 13:00:23     E028: error sending request for url (http://localhost:4000/graphql) while resolving the schema for the 'datasets' subgraph
2024-11-25 13:00:23             Make sure the endpoint is accepting connections and is spelled correctly
2024-11-25 13:00:23     E028: error sending request for url (http://localhost:4002/graphql) while resolving the schema for the 'projects' subgraph
2024-11-25 13:00:23             Make sure the endpoint is accepting connections and is spelled correctly
2024-11-25 13:00:23     E028: error sending request for url (http://localhost:4001/graphql) while resolving the schema for the 'users' subgraph
2024-11-25 13:00:23             Make sure the endpoint is accepting connections and is spelled correctly
2024-11-25 13:00:23

The subgraphs are accessible on http://localhost:4000/graphql, http://localhost:4001/graphql, and http://localhost:4002/graphql when accessed outside Docker, but the supergraph setup fails to recognize these endpoints within Docker.

Has anyone encountered similar issues or can offer insights into what might be causing these connection errors during the supergraph composition in Docker?

2

Answers


  1. Probably worth to point out what localhost is, when you connect to localhost you are actually connecting to yourself.

    Probably your project Docker container is using default bridge docker network, so it is isolated network to container itself. So if your project container tries to connect to http://localhost:400x/graphql that means it tries to find this service on container itself and based on what you put in your question, seems there are no such service running there.

    How do you run http://localhost:400x/graphql services? Is it another container on same host? If it is another container, then best solution would be to have both containers in same docker network and then your project docker container should be able to connect to it using it name like http://containername:4000/graphql, but not localhost!

    Additional and simplest option would be just run your project container in host network and in this case it will use your host network interface and in this case most likely it will be able to connect to http://localhost:400x/graphql. Keep in mind that is probably not an ideal solution, because it will expose all ports of your container and someone with limited understanding how docker works, probably should not use it.

    Login or Signup to reply.
  2. The issue likely stems from Docker’s networking. Replace localhost in your supergraph-config.yaml with host.docker.internal to allow the container to access services running on the host machine.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search