Docker Community Forums

Share and learn in the Docker community.

HTTP post from one docked container to another docker container

Hi,

I am running multiple docker containers in my digital ocean droplet.

I want to invoke a graphql Hasura api running on a docker container from a node js application running on another container.

I tried calling http://ipaddress/v1/graphql from node js application which is the same url I use to access the graphql service from browser. But this failed

I tried http://localhost/v1/graphql but that is not also working.

The following is the docker compose file for Hasura graphql.

version: '3.6'
services:
  postgres:
    image: postgis/postgis:12-master
    restart: always
    volumes:
    - db_data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: <postgrespassword>
  pgadmin:
    image: dpage/pgadmin4
    restart: always
    depends_on:
    - postgres
    ports:
    - 5050:80
    ## you can change pgAdmin default username/password with below environment variables
    environment:
      PGADMIN_DEFAULT_EMAIL: <email>
      PGADMIN_DEFAULT_PASSWORD: <pass>
  graphql-engine:
    image: hasura/graphql-engine:v1.3.0-beta.3
    depends_on:
    - "postgres"
    restart: always
    environment:
      # database url to connect
      HASURA_GRAPHQL_DATABASE_URL: postgres://postgres:postgrespassword@postgres:5432/postgres
      # enable the console served by server
      HASURA_GRAPHQL_ENABLE_CONSOLE: "true" # set "false" to disable console
      ## uncomment next line to set an admin secret key
      HASURA_GRAPHQL_ADMIN_SECRET: <secret>
      HASURA_GRAPHQL_UNAUTHORIZED_ROLE: anonymous
      HASURA_GRAPHQL_JWT_SECRET: '{ some secret }'
    command:
    - graphql-engine
    - serve
  caddy:
    image: abiosoft/caddy:0.11.0
    depends_on:
    - "graphql-engine"
    restart: always
    ports:
    - "80:80"
    - "443:443"
    volumes:
    - ./Caddyfile:/etc/Caddyfile
    - caddy_certs:/root/.caddy
volumes:
  db_data:
  caddy_certs:

The caddy file has the following configuration:

 :80 {
    proxy / graphql-engine:8080 {
        websocket
    }
}
  1. What is the api end point I should be using from another docker container to access the hasura api? From browser I use http://#ipaddress /v1/graphql.
  2. What is the configuration of caddy actually do here?

You start all containers in the same compose file, so try http://graphql-engine/v1/graphql.

Since you named the service graphql-engine, you should be able to reach it that way:
http://graphql-engine