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>
Il peut y avoir deux situations.
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 :