Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Using Docker Compose example database connection timeout

Open
#405 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
docker-compose, javascript, mysql, node.js

Research direction

Start with the tutorial's "Using Docker Compose" section and the app startup behavior shown in the docker compose logs. Reproduce the timeout with docker compose up -d, inspect the existing database-waiting setup, and verify that a fresh launch reaches Connected! and Listening on port 3000 without saving a file to trigger nodemon.

Written by the indexing model from the issue text.

Description

In the "Using Docker Compose" section of the tutorial, when I run the docker compose up -d command, the app fails to launch (i.e. nothing is reachable at http://localhost:3000/.

Examining the logs with docker compose logs -f I found the following error message:

app-app-1    | [nodemon] starting `node src/index.js`
app-app-1    | Waiting for mysql:3306............
app-app-1    | Timeout
app-app-1    | Error: connect ECONNREFUSED 172.20.0.3:3306
app-app-1    |     at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1495:16) {
app-app-1    |   errno: -111,
app-app-1    |   code: 'ECONNREFUSED',
app-app-1    |   syscall: 'connect',
app-app-1    |   address: '172.20.0.3',
app-app-1    |   port: 3306,
app-app-1    |   fatal: true
app-app-1    | }
app-app-1    | [nodemon] app crashed - waiting for file changes before starting...

Further down in the logs, I saw this line:

app-mysql-1  | 2023-08-02T04:02:25.964656Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.34'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.

and when I relaunched the app by saving a file again so nodemon relaunched the app, it worked fine:

app-app-1    | [nodemon] restarting due to changes...
app-app-1    | [nodemon] starting `node src/index.js`
app-app-1    | Waiting for mysql:3306.
app-app-1    | Connected!
app-app-1    | Connected to mysql db at host mysql
app-app-1    | Listening on port 3000

I suspect that the issue is related to this change https://github.com/docker/getting-started/pull/331 adding a timeout to the MySQL database connection.

There is actually a "Pro tip" in the tutorial about the app waiting for the database connection.

Pro tip - Waiting for the DB before starting the app
When the app is starting up, it actually sits and waits for MySQL to be up and ready before trying to connect to it. Docker doesn't have any built-in support to wait for another container to be fully up, running, and ready before starting another container. For Node-based projects, you can use the wait-port dependency. Similar projects exist for other languages/frameworks.

Dominant language
JavaScript
Stars
3.1k
Forks
6.4k
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from docker/getting-started

All issues in docker/getting-started

Similar issues

More JavaScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.