0

I've got a Docker project composed by:

  • Rest API written in Flask (called "python")
  • Backend written in nodejs (called "server")
  • Mongodb

#docker-compose.yml

version: '3.8'
services:
  server:
    build:
      context: ./server
      dockerfile: ./Dockerfile
    restart: on-failure
    ports:
      - "6000:6000"
    links:
      - python
      - mongo
    depends_on:
      - python
      - mongo
    volumes:
      - ./server:/code
    env_file: .env
    environment:
      - MONGO_USERNAME=$DATABASE_USERNAME
      - MONGO_PASSWORD=$DATABASE_PASSWORD
      - MONGO_HOST=mongo
      - MONGO_PORT=$DATABASE_PORT
      - MONGO_DB=$DATABASE
    networks:
      - todo-network
  python:
    build:
      context: ./rest_api_wrapper_py
      dockerfile: ./Dockerfile
    restart: on-failure
    ports:
      - "5000:5000"
    links:
      - mongo
    depends_on:
      - mongo
    volumes:
      - ./rest_api_wrapper_py:/code   
    env_file: .env
    environment:
      - MONGO_USERNAME=$DATABASE_USERNAME
      - MONGO_PASSWORD=$DATABASE_PASSWORD
      - MONGO_HOST=mongo
      - MONGO_PORT=$DATABASE_PORT
      - MONGO_DB=$DATABASE
    networks:
      - todo-network
  mongo:
    image: mongo
    restart: on-failure
    env_file: .env
    environment:
      - MONGO_INITDB_ROOT_USERNAME=$DATABASE_ROOT_USERNAME
      - MONGO_INITDB_ROOT_PASSWORD=$DATABASE_ROOT_PASSWORD
      - MONGO_INITDB_DATABASE=$DATABASE
      - DATABASE_USERNAME=$DATABASE_USERNAME
      - DATABASE_PASSWORD=$DATABASE_PASSWORD
      - MONGO_PORT=$DATABASE_PORT
    volumes:
      - /home/s0n1c/tmp/mongo:/data/mongo
      - ./docker_scripts/:/docker-entrypoint-initdb.d
      - /data/mongodb/db:/data/db
    ports:
      - "27017:27017"
    networks:
      - todo-network
networks:
  todo-network:
    driver: bridge

"python" starts correctly:

Running on http://127.0.0.1:5000/

I need to call the endpoint python:5000/variables from "server" (node js):

(async () => {
  try {
  const res = await superagent.get('http://python:5000/variables');
  console.log(res);
  } catch (err) {
console.error(err);
  }
})();

This request fails:

server_1  | Error: connect ECONNREFUSED 172.19.0.3:5000
server_1  |     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16) {
server_1  |   errno: -111,
server_1  |   code: 'ECONNREFUSED',
server_1  |   syscall: 'connect',
server_1  |   address: '172.19.0.3',
server_1  |   port: 5000,
server_1  |   response: undefined
server_1  | }

Can someone help me, please? Thanks a lot

SkuPak
  • 307
  • 8
  • 16
  • What happens when you try to call the python API from the host i.e localhost:5000? – Subesh Bhandari Jun 16 '20 at 13:20
  • You need to set the Python application to listen on the special 0.0.0.0 "all interfaces" address; the "Running on http://127.0.0.1:5000/" message means that it will be unreachable from outside its own container. [Deploying a minimal flask app in docker - server connection issues](https://stackoverflow.com/questions/30323224/deploying-a-minimal-flask-app-in-docker-server-connection-issues/43015007#43015007) for example has some discussion on the topic. – David Maze Jun 16 '20 at 13:53

0 Answers0