Heim  >  Fragen und Antworten  >  Hauptteil

Übergeben Sie das Passwort vom Befehl von .env an MySQL im Docker

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粉521748211P粉521748211207 Tage vor365

Antworte allen(2)Ich werde antworten

  • P粉403804844

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

    可能有两种情况。

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

    Antwort
    0
  • P粉464082061

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

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

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

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

    Antwort
    0
  • StornierenAntwort