web-dev-qa-db-fra.com

Wordpress sur docker-compose pas de cours

Ceci est mon docker-compose.yml

version: '2'
services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_PASSWORD: example
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

les services fonctionnent normalement, mais quelques secondes plus tard, le conteneur wordpress s’arrête.

Voici mon journal Wordpress docker contenant:

WordPress not found in /var/www/html - copying now...
Complete! WordPress has been successfully copied to /var/www/html

MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known

Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10

Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10

MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known

Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10

Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10


MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known
Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10

Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10

Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10

MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known

Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10

Pourquoi cela arrive-t-il?

9
alvarezsh

Solution:

N'oubliez pas de lier le conteneur mysql au conteneur wordpress:

links:
   - db:mysql

Comme ça:

version: '2'
services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    links:
      - db:mysql
    environment:
      WORDPRESS_DB_PASSWORD: example
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

Ce détail important n’est pas mentionné sur la page Dockerhub officielle de WordPress image } _

5
Vingtoft

Définissez-vous l’hôte de base de données (et les autres attributs MySql nécessaires) dans votre service wordpress Compose file (autre que le mot de passe indiqué dans votre message)? par exemple.:

environment:
  WORDPRESS_DB_PASSWORD: example
  WORDPRESS_DB_Host: db
  WORDPRESS_DB_USER: {xxx}
  WORDPRESS_DB_NAME: {xxx}
  WORDPRESS_TABLE_PREFIX: {xxx}

En particulier, la valeur "Host" qui, dans votre configuration, devrait être db. Vous ne devriez pas avoir à faire de lien, bien que ce serait une bonne idée d’ajouter

depends_on:
  - db

à votre bloc de service wordpress qui définira l'ordre de dépendance pour démarrer le conteneur de base de données avant votre conteneur de wordpress. (Un attribut links ferait la même chose, mais en essayant de garder les choses simples.)

Remarque:

Par défaut, Compose configure un seul réseau pour votre application . Chaque conteneur d'un service rejoint le réseau par défaut et est accessible à la fois par d'autres conteneurs sur ce réseau et détectable par ceux-ci sous un nom d'hôte identique au nom du conteneur.

Links vous permet de définir des alias supplémentaires grâce auxquels un service est accessible depuis un autre service. Il s’agit de non requis pour permettre aux services de communiquer - par défaut, tout service peut accéder à n’importe quel autre service au nom de ce service .

https://docs.docker.com/compose/networking/#/links

Je ne voudrais pas perdre mon temps avec les réseaux si vous ne comprenez pas vraiment ce que vous faites, car dans la plupart des cas, les valeurs par défaut fonctionneront correctement. Si vous avez un cas particulier, vous pouvez toujours l'optimiser plus tard.

1
ldg

Cette réponse fonctionne pour moi, parce que je n’avais pas assez de réputation pour voter, je la copie ici:

depends_on: - db Cela garantit simplement que le conteneur de base de données est entièrement chargé avant le conteneur wordpress. Vous devez indiquer à docker de lier le conteneur db à partir du conteneur wordpress afin de le référencer par son nom.

Ce que docker-compose fait sous le capot est de prendre le dockeur ip donne le conteneur db et d'ajouter une entrée /etc/hosts au conteneur wordpress afin que vous puissiez le référencer par son nom.

Alors essayez d'ajouter ceci à la section wordpress links: - db

1
NOZUONOHIGH

Je n'ai pas utilisé yml, mais j'avais les mêmes journaux et cela n'a pas fonctionné

docker run -dP --link elated_yonath -e WORDPRESS_DB_USER=libik -e WORDPRESS_DB_PASSWORD=prdik wordpress 

Mais ensuite j'ai trouvé que je devais ajouter: mysql au conteneur lié

docker run -dP --link elated_yonath:mysql -e WORDPRESS_DB_USER=libik -e WORDPRESS_DB_PASSWORD=prdik wordpress 

Maintenant ça a commencé.

0
libik