title: docker-compose: nodejs + mysql can't connect mysql
body: <p>I try to dockerlized my own node application, but can't connect the mysql container. my codes:  </p>
  
  <h3>docker-compose.yml</h3>
  
  <pre><code>  version: '3.2'
    services:
      node:
        build: ./
        ports:
          - "8787:8787"
        depends_on:
          - db
        networks:
          - docker_xxx
        environment:
          - PORT=8787
          - DATABASE_HOST=db
          - DATABASE_PASSWORD=xxx
          - EGG_SERVER_ENV=local
          - NODE_ENV=development
        # command: ["./wait-for-it.sh", "db:3306", "--", "npm run docker"]
      db:
        build: ./db
        networks:
          - docker_xxx
        environment:
          - MYSQL_ROOT_PASSWORD=xxx
          - MYSQL_DATABASE=database
          - MYSQL_USER=user
          - MYSQL_PASSWORD=passwd
  
    networks:
      docker_xxx:
        driver: bridge
  </code></pre>
  
  <h3>./Dockerfile (for nodejs)</h3>
  
  <pre><code>  FROM node:8.9.4-alpine
  
    RUN mkdir -p /usr/src/app
  
    WORKDIR /usr/src/app
  
    COPY package.json /usr/src/app/
  
    RUN npm install --production
  
    COPY . /usr/src/app
    # COPY wait-for-it.sh /usr/src/app
  
    EXPOSE 8787
  
    CMD npm run docker
  </code></pre>
  
  <h3>db/Dockerfile (for mysql)</h3>
  
  <pre><code>  FROM mysql:5.6
  
    ADD honggang.sql /docker-entrypoint-initdb.d
  </code></pre>
  
  <h3>config/config.default.js</h3>
  
  <pre><code> config.mysql = {
      // mysql settings
      client: {
        // host
        host: process.env.DATABASE_HOST || '127.0.0.1',
        // port
        port: '3306',
        // username
        user: 'root',
        // password
        password: 'xxx',
        database: 'xxx',
        charset: 'utf8',
        dialectOptions: {
          collate: 'utf8_general_ci',
        },
      },
      app: true,
      agent: false,
    };
  </code></pre>
  
  <p>I run <code>docker-compose up -d</code> , there's only <code>db</code> running.</p>
  
  <p>I run <code>docker logs hash</code> to find errors, it shows the following info:</p>
  
  <pre><code>        2018-04-30 14:43:51,334 ERROR 54 nodejs.ECONNREFUSEDError: connect ECONNREFUSED 172.19.0.2:3306
              at Object._errnoException (util.js:1022:11)
              at _exceptionWithHostPort (util.js:1044:20)
              at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1182:14)
              --------------------
              at Protocol._enqueue (/usr/src/app/node_modules/mysql/lib/protocol/Protocol.js:145:48)
              at Protocol.handshake (/usr/src/app/node_modules/mysql/lib/protocol/Protocol.js:52:23)
              at PoolConnection.connect (/usr/src/app/node_modules/mysql/lib/Connection.js:130:18)
              at Pool.getConnection (/usr/src/app/node_modules/mysql/lib/Pool.js:48:16)
              at /usr/src/app/node_modules/ali-rds/node_modules/pify/index.js:29:7
              at new Promise (&lt;anonymous&gt;)
              at Pool.&lt;anonymous&gt; (/usr/src/app/node_modules/ali-rds/node_modules/pify/index.js:12:10)
              at Pool.ret [as getConnection] (/usr/src/app/node_modules/ali-rds/node_modules/pify/index.js:56:34)
              at Pool.query (/usr/src/app/node_modules/mysql/lib/Pool.js:202:8)
              at /usr/src/app/node_modules/ali-rds/node_modules/pify/index.js:29:7
              sql: select now() as currentTime;
          code: 'ECONNREFUSED'
          errno: 'ECONNREFUSED'
          syscall: 'connect'
          address: '172.19.0.2'
          port: 3306
          fatal: true
          name: 'ECONNREFUSEDError'
          pid: 54
          hostname: d9cd95667a5d
  </code></pre>
  
  <p>I added <code>CMD ping db</code>, it responded.</p>
  
  <hr>
  
  <p>I tried to use <code>wait-for-it.sh</code> (the code just commented out), but got the error info: </p>
  
  <pre><code>env: can't execute 'bash': No such file or directory
  </code></pre>