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?
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
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.
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 videif [ -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