web-dev-qa-db-fra.com

Docker-compose: la base de données n'est pas initialisée

J'ai un problème avec docker-compose et mysql:

docker-compose.yml

version: '2' 
  services:
   db:
    image: mysql
    volumes:
      - "./sito/db/:/var/lib/mysql"
    ports:
      - "3306:3306"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD:

   app:
    depends_on:
      - db
    image: eboraas/Apache-php
    links:
      - db
    ports:
      - "80:80"
    volumes:
      - ./sito/:/var/www/html/

Une erreur s'est produite lorsque je compose ce conteneur:

Recreating phpapp_phpapache_1
Attaching to phpapp_db_1, phpapp_phpapache_1
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
phpapache_1 | AH00558: Apache2: Could not reliably determine the server's fully qualified domain name, using 172.30.0.3. Set the 'ServerName' directive globally to suppress this message
phpapp_db_1 exited with code 1
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
db_1 | error: database is uninitialized and password option is not specified

Mais la base de données n'a pas de mot de passe. Comment puis-je le résoudre?

12
Stefano

Selon documentation , au lieu de MYSQL_ROOT_PASSWORD: vous devez utiliser - et = et vous devez également utiliser un 'mot de passe' Le résultat sera:

- MYSQL_ROOT_PASSWORD=some_password

Dans votre exemple:

version: '2' 
  services:
   db:
    image: mysql
    volumes:
      - "./sito/db/:/var/lib/mysql"
    ports:
      - "3306:3306"
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=some_password
11
mayo

Il semble que vous définissiez le MYSQL_ROOT_PASSWORD à rien. Selon la documentation, il est obligatoire.

https://hub.docker.com/_/mysql/

MYSQL_ROOT_PASSWORD

Cette variable est obligatoire et spécifie le mot de passe qui sera défini pour le compte superutilisateur racine MySQL.

4
DevOps Dan

Le problème apparaîtra si vous ne spécifiez pas de valeur pour MYSQL_ROOT_PASSWORD (autres cas expliqués ci-dessous).

Vous pouvez utiliser l'une des syntaxes suivantes ci-dessous:

# syntax 1
environment:
  MYSQL_ROOT_PASSWORD: strongrootpassword
# syntax 2
environment:
 - MYSQL_ROOT_PASSWORD=strongrootpassword

Si vous souhaitez utiliser un mot de passe vide/vide, utilisez ce qui suit:

MYSQL_ALLOW_EMPTY_PASSWORD=1

Si vous souhaitez définir un mot de passe aléatoire, utilisez les éléments suivants:

MYSQL_RANDOM_ROOT_PASSWORD=1

Ensuite, vous pouvez obtenir le mot de passe généré en utilisant

docker logs container_name_or_id 

En fin de compte, vous devez spécifier UN of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD et MYSQL_RANDOM_ROOT_PASSWORD selon le point d'entrée de l'image MySQL:

  • -z est de vérifier que la variable n'est pas vide
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
    echo >&2 'error: database is uninitialized and password option is not specified '
    echo >&2 '  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'
    exit 1
fi
3
Mostafa Hussein