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?
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 } _
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 .
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.
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
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é.