Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Docker MYSQL '[2002] Connection refused'

Tags:

I was trying out Docker for the first time. Got a LEMP stack up and running, but I can't connect to the MYSQL Database. Not on my Symfony application, not on PHPMyAdmin. The applications are returning the following error code:

An exception occured in driver: SQLSTATE[HY000] [2002] Connection refused

This is my docker-compose.yml:

nginx:     image: tutum/nginx     ports:         - "80:80"     links:         - phpfpm     volumes:         - ./nginx/default:/etc/nginx/sites-available/default         - ./nginx/default:/etc/nginx/sites-enabled/default          - ./logs/nginx-error.log:/var/log/nginx/error.log         - ./logs/nginx-access.log:/var/log/nginx/access.log phpfpm:     build: phpfpm/     ports:         - "9000:9000"     volumes:         - ./public:/usr/share/nginx/html mysql:   image: mariadb   ports:     - 3306:3306   environment:     MYSQL_ROOT_PASSWORD: admin phpmyadmin:   image: phpmyadmin/phpmyadmin   restart: always   links:     - mysql   ports:     - 8183:80   environment:     MYSQL_USERNAME: admin     MYSQL_ROOT_PASSWORD: admin     PMA_ARBITRARY: 1 

Dockerfile PHPFPM:

    FROM php:fpm  RUN docker-php-ext-enable opcache RUN apt-get update \   && apt-get install -y --no-install-recommends libpq-dev \   && docker-php-ext-install mysqli pdo_pgsql pdo_mysql 

GitHub URL: https://github.com/MolengraafFrank/DockerSymfony

Could someone help me out? Thank you for your time.

like image 343
Frank Millc Avatar asked Nov 12 '16 09:11

Frank Millc


People also ask

How do I connect to a MySQL Docker container?

Here are the steps you can follow to install the Dockerhub MySQL Container: Step 1: Pull the Docker Image for MySQL. Step 2: Deploy and Start the MySQL Container. Step 3: Connect with the Docker MySQL Container.

What is my Docker container IP?

You can easily get the IP address of any container if you have the name or ID of the container. You can get the container names using the "Docker ps -a" command. This will list all the existing containers.


2 Answers

The '[2002] Connection refused' means you can reach the database server, but you don't have right access for the user (in your case admin). By default mariadb have a root user with the password given by MYSQL_ROOT_PASSWORD and this user can connect from any server (%).

If you want use an over login to your databases, you have to create it in the databases server with the right granting on databases from chosen locations.

The problem here is that you have named your database server as 'mysql' (service name in the docker-compose file). But by default phpmyadmin tries to connect to a database server named 'db'. Adding PMA_HOST: mysql under the environment section of the phpmyadmin service will resolve this problem.


I think that MYSQL_USERNAME and PMA_ARBITRARY are useless if you work with default configuration (connection with root to your databases server)
like image 87
JL M Avatar answered Nov 09 '22 05:11

JL M


I had this challenge because I am running 3 different containers with different IP Addresses

db - 172.18.0.3 - container for MYSQL app - 172.18.0.2 - container for Laravel app 

so I fixed it by editing my Laravel .env file

DB_CONNECTION=mysql DB_HOST=172.18.0.3 DB_PORT=3306 DB_DATABASE=database_name DB_USERNAME=username ... 

To get your containers Ip addresses. From your docker host

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) 

UPDATED: For latest docker versions and based on the services name, "mysql", in your docker-compose.yml

mysql:   image: mariadb   ports:     - 3306:3306 

You can try this:

DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=database_name DB_USERNAME=username 

DB_HOST is the name of MySQL service name defined in docker-compose.yml

like image 35
Emeka Mbah Avatar answered Nov 09 '22 03:11

Emeka Mbah