web-dev-qa-db-fra.com

docker-compose wordpress connexion mysql refusée

J'ai créé un petit docker-compose.yml qui fonctionnait comme un charme pour déployer de petites instances de WordPress. Cela ressemble à ceci:

wordpress:
  image: wordpress:latest
  links:
   - mysql
  ports:
   - "1234:80"
  environment:
    WORDPRESS_DB_USER: wordpress
    WORDPRESS_DB_NAME: wordpress
    WORDPRESS_DB_PASSWORD: "password"
    WORDPRESS_DB_Host: mariadb
    MYSQL_PORT_3306_TCP: 3306
  volumes:
    - /srv/wordpress/:/var/www/html/
mysql:
  image: mariadb:latest
  mem_limit: 256m
  container_name: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: "password"
    MYSQL_DATABASE: wordpress
    MYSQL_USER: wordpress
    MYSQL_PASSWORD: "password"
  volumes:
    - /srv/mariadb:/var/lib/mysql

Mais quand je le lance maintenant (peut-être depuis la mise à jour de Docker vers Docker version 1.9.1, build a34a1d5), cela échoue.

wordpress_1 | Warning: mysqli::mysqli(): (HY000/2002): Connection    refused in - on line 10
wordpress_1 | 
wordpress_1 | MySQL Connection Error: (2002) Connection refused

Quand je cat /etc/hosts du wordpress_1 il y a des entrées pour MySQL:

172.17.0.10 mysql 12a564fdbc56 mariadb

et je suis capable de cingler le serveur MariaDB.

Lorsque je docker-compose up, WordPress est installé et, après plusieurs redémarrages, le conteneur MariaDB affiche:

Version: '10.0.22-MariaDB-1~jessie'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution

Qui devrait indiquer qu'il fonctionne, n'est-ce pas?

Comment obtenir que WordPress puisse se connecter au conteneur MariaDB?

9
Harry

La raison de ce comportement était probablement liée à une mise à jour récente du noyau et du menu fixe. J'ai reconnu plusieurs autres problèmes de connexion dans d'autres configurations composées avec docker. Par conséquent, j'ai redémarré le serveur (pas seulement le service Docker) et je n'ai pas eu de problèmes de ce genre depuis.

8
Harry

Pour résoudre ce problème, la première chose à faire est:

Ajoutez le code suivant aux conteneurs wordpress & database (dans le fichier docker-compose):

restart: unless-stopped

Cela garantira que votre base de données est démarrée et initiée avant que WordPress Container ne tente de s'y connecter. Puis redémarrez le moteur de docker

Sudo restart docker

ou (pour Ubuntu 15+)

Sudo service docker restart 

Voici la configuration complète qui a fonctionné pour moi, pour configurer Wordpress avec MariaDB:

version: '2'

services:
  wordpress:
    image: wordpress:latest
    links:
      - database:mariadb
    environment:
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_NAME=mydbname
      - WORDPRESS_TABLE_PREFIX=ab_
      - WORDPRESS_DB_PASSWORD=password
      - WORDPRESS_DB_Host=mariadb
      - MYSQL_PORT_3306_TCP=3306
    restart: unless-stopped
    ports:
      - "test.dev:80:80"
    working_dir: /var/www/html
    volumes:
     - ./wordpress/:/var/www/html/
  database:
   image: mariadb:latest
   environment:
     - MYSQL_ROOT_PASSWORD=password
     - MYSQL_DATABASE=mydbname
     - MYSQL_USER=wordpress
     - MYSQL_PASSWORD=password
   restart: unless-stopped
   ports:
     - "3306:3306"
6

J'avais presque le même problème, mais le simple redémarrage du conteneur Wordpress m'a sauvé:

$ docker restart wordpress

J'espère que cela aidera beaucoup de gens.

1
gold-kou

Moi aussi j'ai eu des problèmes ici. J'utilisais docker-compos pour configurer plusieurs sites Web wordpress sur un (micro) serveur privé virtuel, y compris phpmyadmin et jwilder/nginx-proxy en tant que contrôleur. 

$ docker logs XXXX aidera à indiquer les domaines de préoccupation. Dans mon cas, les bases de données MariaDB continueraient à redémarrer tout le temps. 

Il s’avère que tout cela ne tient pas sur un service micro 512M Single CPU. Je n'ai jamais reçu de messages d'erreur m'indiquant directement que la taille était un problème, mais après avoir ajouté des éléments, je me suis rendu compte que lorsque toutes les bases de données démarraient, je manquais de mémoire. Une mise à niveau vers 1 Go, 1 service de processeur fonctionnait parfaitement. 

1
zipzit

J'utilisais votre docker-compose.yml, avait le même problème. Juste redémarrer n'a pas résolu. Après presque une heure de recherche dans les journaux, j'ai constaté que le problème était le suivant: le service wordpress a commencé à se connecter au service mysql avant qu'il ne soit complètement démarré. Ajouter simplement depend_on ne vous aidera pas. Docker Compose attendre le conteneur X avant de démarrer Y

la solution consiste à démarrer le serveur db avant Up. Quand il a complètement démarré, lancez docker-compose up. Ou utilisez simplement un service externe.

1
Awakening Byte

Dans mon cas, j'utilise Mysql (pas MariaDb) mais j'ai eu le même problème. Après la mise à niveau de la version de MySQL, tout fonctionne correctement.

Vous pouvez voir ma configuration open-source de docker-compose: https://github.com/rimiti/wordpress-dockerized-environment

0
Dimitri