Übergeben Sie das Passwort vom Befehl von .env an MySQL im Docker
P粉521748211
P粉521748211 2024-03-26 09:38:42
0
2
407

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 .envDatei

lesen lassen

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粉521748211
P粉521748211

Antworte allen(2)
P粉403804844

可能有两种情况。

  1. 检查 env 文件中的密钥名称和 docker run 命令
  2. 检查您要映射到的 env 文件的路径。
P粉464082061

您应该防止 shell 扩展局部变量(通过单引号或转义 $

这应该传递到容器 shell 并在那里展开:

docker exec --env-file=.env -i {image} bash -c 'mysql -uroot -p$DB_PASSWORD {database}' 
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage