Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using Docker Compose example database connection timeout #405

Open
jamesdarrenmuir opened this issue Aug 2, 2023 · 1 comment
Open

Using Docker Compose example database connection timeout #405

jamesdarrenmuir opened this issue Aug 2, 2023 · 1 comment

Comments

@jamesdarrenmuir
Copy link

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 #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.

@jamesdarrenmuir
Copy link
Author

This issue seems to be a duplicate of #351.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant