I got a docker-compose setup with two containers: One is the php/apache service and the other container is the database (mysql).
Here is my docker-compose.yml
version: '2' services: app: depends_on: - db links: - db:mysql build: . image: app ports: - "80:80" restart: always links: - db:db volumes: - ../:/var/www/html/ db: image: mysql:latest restart: unless-stopped volumes: - ./db_data:/var/lib/mysql - ./databaseDumps:/tmp/databaseDumps environment: MYSQL_USER: "myApp" MYSQL_PASSWORD: "root" MYSQL_ROOT_PASSWORD: "root" MYSQL_DATABASE: "myAppDatabase" MYSQL_ROOT_HOST: "%"
And here is my app Dockerfile:
FROM php:7-apache COPY prefilled_files/000-default.conf /etc/apache2/sites-available/000-default.conf RUN apt-get -qq update RUN apt-get -qq -y install libpng-dev curl git nano vim zip unzip mysql-client libmysqlclient-dev RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - RUN apt-get install -y nodejs RUN npm install -g bower RUN npm install -g gulp RUN docker-php-ext-install pdo pdo_mysql gd mysqli EXPOSE 8080 80
The main problem is, the mysql database and the app container working well, and I can connect to the mysql database from the app container via
[email protected]: mysql -h db -u myApp -p
if I try to execute
composer install on my symfony project, following error message appears:
[Doctrine\DBAL\Driver\PDOException] SQLSTATE[HY000]  Connection refused [PDOException] SQLSTATE[HY000]  Connection refused
Here are my parameters of my app:
parameters: database_driver: pdo_mysql database_host: db database_port: 3306 database_name: myAppDatabase database_user: myApp database_password: root
Why is this happening?
I’ve read through several forums and sites but nothing helped.
I tried the following solutions and nothing helped:
- clearing symfony cache 😉
- expose 3306 on mysql container
- link app and mysql container together
- removing all images and containers from my computer and reinstalled everything
- I tried on windows and on ubuntu 17.04. Same behavior
I tried to access my database with a little php script from https://gist.github.com/chales/11359952 . PHP/My Script can actually connect to the database, so the problem has to be in with my
composer install or in doctrine or in my configuration of symfony.
- 2 Docker container via docker compose
- I can access the database via
mysqlcommand on the app container but not over
composer install. Why?
I think it’s the way it’s trying to find the container via the host name ‘db’, I’ve found that on the machine running docker, it doesn’t seem to pick up the names of the guest containers (could be some DNS config you could change) but the way I’ve worked round it is to find the IP address of the MySQL container. I have docker_db_1 as the container name for MySQL, so I run (assuming *nix)
docker inspect docker_db_1 | grep IPAddress
Which in my case gives me
"SecondaryIPAddresses": null, "IPAddress": "", "IPAddress": "172.18.0.2",
And I use this IP address (
172.18.0.2) to connect to rather than db.