mgrenier
mgrenier

Reputation: 1447

Docker-Compose Services Not Communicating

Docker noob alert. Hope this isn't a dumb question but I cannot seem to figure out what is going on. I am trying to create a docker-compose file which creates a mysql db with a mounted volume and a go webserver app that connects to the mysql db.

Here is my docker-compose file:

services:
  db:
    image: mysql:8.0.2
    environment: 
      MYSQL_ROOT_PASSWORD: test
      MYSQL_DATABASE: northernairport
    ports:
      - "3306:3306"
    volumes:
      - /data:/var/lib/mysql
  web:
    depends_on:
      - db
    build: .
    ports:
      - "8080:8080"

My go application can't seem to connect to my mysql db though, I thought the "depends_on" would ensure this was possible.

Error I get:

panic: dial tcp 127.0.0.1:3306: getsockopt: connection refused

Can anyone tell me what I am doing wrong here? Thanks.

Upvotes: 0

Views: 737

Answers (2)

Alexey Mukas
Alexey Mukas

Reputation: 739

The ports part is used to map container ports with host in following format ports (HOST:CONTAINER). Which means that you are trying to access host's machine, configure web app to connect to db:3306 instead.

Upvotes: 1

Steve Boyd
Steve Boyd

Reputation: 1357

The depends_on only controls the build and startup order for the services.

Your actual issue is more likely that you are using the wrong address from your web application to your database. I see that you have not defined any networks, so you are using the default network created for your application by docker-compose. This will publish each service by name on the default network's DNS.

So, your web application should probably be using db:3306 as the database address, not localhost:3306 or 127.0.0.1:3306 as indicated in the error message.

Upvotes: 4

Related Questions