Ich weiß im Grunde nichts über Docker. Es geht auch nicht so sehr um Bash. Also:
In der Readme-Datei des Laravel-Projekts, an dem ich arbeite, gibt es einen Befehl, der zeigt, wie man einige Daten in ein lokales MySQL-Docker-Image einfügt, indem man eine Abfrage von einer Datei sendet, die sich auf dem Host-Computer befindet.
docker exec -i {image} mysql -uroot -p{password} {database} < location/of/file.sql
Ich möchte das Passwort aus der README-Datei „verstecken“ und es aus der .env
Datei
Also möchte ich so etwas machen:
docker exec --env-file=.env -i {image} mysql -uroot -p$DB_PASSWORD {database} < location/of/file.sql
Ich habe es getestet docker ... printenv
确实显示了文件中的变量。但是回显其中一个会输出一个空行: docker ... echo $DB_PASSWORD
und wenn ich es zum Ausführen von MySQL-Befehlen verwende, erhalte ich die Meldung „Zugriff verweigert für Benutzer ‚root‘@‘localhost‘“
Ich habe versucht, den MySQL-Befehl „direkt“ auszuführen: docker ... mysql ... < file.sql
,也尝试“间接”运行: docker bash -c "mysql ..." < file.sql
. p>
可能有两种情况。
您应该防止 shell 扩展局部变量(通过单引号或转义
$
)这应该传递到容器 shell 并在那里展开: