title: docker-compose ECONNREFUSED for Postgres on nodeJS
body: <p>This error is the same with <a href="https://stackoverflow.com/questions/33357567/econnrefused-for-postgres-on-nodejs-with-dockers">ECONNREFUSED</a>. But the implementation way is different then I will ask another question here.</p>
  
  <p>Here is the <code>docker-compose.yml</code> file</p>
  
  <pre><code>version: '3'
  
  services:
    server:
      build:
        context: .
      volumes:
        # Mounts the project directory on the host to /app inside the container,
        # allowing you to modify the code without having to rebuild the image.
        - .:/app
        # Just specify a path and let the Engine create a volume.
        # Data present in the base image at the specified mount point will be copied
        # over to the new volume upon volume initialization.
        # node_modules from this new volume will be used and not from your local dev env.
        - /app/node_modules/
  
      # Expose ports [HOST:CONTAINER}
      ports:
        - "4040:4040"
  
      # Set environment variables from this file
      env_file:
        - .env
  
      # Overwrite any env var defined in .env file (if required)
      environment:
        - NODE_ENV=development
  
      # Link to containers in another service.
      # Links also express dependency between services in the same way as depends_on,
      # so they determine the order of service startup.
      links:
        - postgres
    postgres:
      image: "postgres:9.6"
      ports:
        - "5432:5432"
      environment:
        POSTGRES_PASSWORD: 123456
        POSTGRES_USER: postgres
        POSTGRES_DB: postgres
  </code></pre>
  
  <p>Here is the <code>database.json</code> file which I used to store database information</p>
  
  <pre><code>{
  "development": {
      "username": "postgres",
      "password": "123456",
      "database": "mydb",
      "host": "127.0.0.1",
      "dialect": "postgres",
      "pool": {
          "max": 100,
          "min": 0,
          "idle": 10000
      }
  },
  "test": {
      "username": "postgres",
      "password": "123456",
      "database": "mytestdb",
      "host": "127.0.0.1",
      "dialect": "postgres"
  },
  "production": {
      "username": "postgres",
      "password": "123456",
      "database": "mydb",
      "host": "127.0.0.1",
      "dialect": "postgres"
  }
  }
  </code></pre>
  
  <p>And use Sequelize to connect DB</p>
  
  <pre><code>import database from '../../config/database.json'
  
  const sequelize = new Sequelize(dbConfig.database, dbConfig.username, dbConfig.password, dbConfig)
  </code></pre>
  
  <p>I know that when I run applications in containers they are not both on locahost then I have to change <code>host</code>, but how I can change here. I worked around by update <code>host</code> to <code>postgres</code>. It works but the solution is not what I want to find.</p>
  
  <p>By the way, how can I create DB here. </p>
  
  <p><code>postgres_1        | FATAL:  database "starflow" does not exist</code></p>