recherche

Maison  >  Questions et réponses  >  le corps du texte

Transmettez le mot de passe de la commande de .env à mysql dans Docker

Je ne connais pratiquement rien à Docker. Pas tellement à propos de bash non plus. Alors :

Il y a une commande dans le fichier readme du projet Laravel sur lequel je travaille qui montre comment remplir certaines données sur une image docker MySQL locale en envoyant une requête à partir d'un fichier situé sur la machine hôte.

docker exec -i {image} mysql -uroot -p{password} {database} < location/of/file.sql

Ce que je veux faire, c'est "masquer" le mot de passe du README et le faire lire dans le .env fichier

Donc, je veux faire quelque chose comme ceci :

docker exec --env-file=.env -i {image} mysql -uroot -p$DB_PASSWORD {database} < location/of/file.sql

J'ai testé docker ... printenv 确实显示了文件中的变量。但是回显其中一个会输出一个空行: docker ... echo $DB_PASSWORD et l'utiliser pour exécuter des commandes MySQL me donne "L'accès est refusé pour l'utilisateur 'root'@'localhost'"

J'ai essayé d'exécuter la commande MySQL "directement" : docker ... mysql ... < file.sql ,也尝试“间接”运行: docker bash -c "mysql ..." < file.sql .

P粉521748211P粉521748211316 Il y a quelques jours461

répondre à tous(2)je répondrai

  • P粉403804844

    P粉4038048442024-03-27 00:47:43

    Il peut y avoir deux situations.

    1. Vérifiez le nom de la clé dans le fichier env et la commande docker run
    2. Vérifiez le chemin d'accès au fichier env auquel vous souhaitez mapper.

    répondre
    0
  • P粉464082061

    P粉4640820612024-03-27 00:15:08

    Vous devez empêcher le shell de développer les variables locales (via des guillemets simples ou une fuite $)

    Cela doit être transmis à la coque du conteneur et développé à cet endroit :

    docker exec --env-file=.env -i {image} bash -c 'mysql -uroot -p$DB_PASSWORD {database}' < location/of/file.sql
    

    répondre
    0
  • Annulerrépondre