HiveBrain v1.2.0
Get Started
← Back to all entries
patterndockerMinor

Docker Compose V3 app container can't access couchdb container

Submitted by: @import:stackexchange-devops··
0
Viewed 0 times
cancontainerappdockercouchdbcomposeaccess

Problem

I am trying to connect to couchdb through the container but my app is not seeing it.

However if I use the external address 123.456.789.123:12345 (server_ip:external_port)
it works but I need a connection through network with the internal port 5986.

Docker-Compose.yml

version: '3'
    services:
      couchdb:
        image: couchdb:latest
        restart: always
        volumes:
          - couchdb-data-volume:/usr/local/var/lib/couchdb
        env_file: .env.docker
        ports:
          - "12345:5986"
        networks:
          app-net:
            aliases:
              - couchdb
      app:
        build: .
        image: app
        restart: always
        depends_on:
          - couchdb
        env_file: .env.docker  
    networks:
      app-net:
        driver: bridge
    volumes:
      couchdb-data-volume:


ENV FILE

NODE_ENV=production
COUCHDB_SERVER=http://user:pass@couchdb:5986
COUCHDB_USER=user
COUCHDB_PASSWORD=pass


I Also tried links instead of networks but the same issue.

links:
 - couchdb


Any Ideas ?

Solution

Your mistake is that you are did not register the app service on the app-net network. To allow containers to connect with one another, they have to share a network and then use the image name as the domain name. Docker provides a network internal DNS service.

version: '3'
services:
  couchdb:
    image: couchdb:latest
    restart: always
    volumes:
      - couchdb-data-volume:/usr/local/var/lib/couchdb
    env_file: .env.docker
    ports:
      - "12345:5986"
    networks:
      app-net:

  app:
    build: .
    image: app
    container_name: app
    restart: always
    depends_on:
      - couchdb
    env_file: .env.docker  
    networks:
      - app-net

volumes:
  couchdb-data-volume:

networks:
  app-net:


The URL from the app to the couchdb service would be http://couchdb:5986. To test this, open bash inside the app service with docker exec -it app. This depends on the container_name setting.

Code Snippets

version: '3'
services:
  couchdb:
    image: couchdb:latest
    restart: always
    volumes:
      - couchdb-data-volume:/usr/local/var/lib/couchdb
    env_file: .env.docker
    ports:
      - "12345:5986"
    networks:
      app-net:

  app:
    build: .
    image: app
    container_name: app
    restart: always
    depends_on:
      - couchdb
    env_file: .env.docker  
    networks:
      - app-net

volumes:
  couchdb-data-volume:

networks:
  app-net:

Context

StackExchange DevOps Q#3349, answer score: 1

Revisions (0)

No revisions yet.