首页  >  问答  >  正文

将命令中的密码从 .env 传递到 docker 内的 mysql

我对docker基本上一无所知。关于 bash 也没有那么多。所以:

我正在处理的 Laravel 项目的自述文件中有一个命令,它展示了如何通过从位于主机中的文件发送查询来填充本地 MySQL docker 映像上的一些数据。

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

我想要做的是从 README 中“隐藏”密码,并使其从 .env 文件中读取

所以,我想做这样的事情:

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

我已经测试过 docker ... printenv 确实显示了文件中的变量。但是回显其中一个会输出一个空行: docker ... echo $DB_PASSWORD 并使用它运行MySQL命令,让我“访问被拒绝用户'root'@'localhost'”

我尝试“直接”运行MySQL命令: docker ... mysql ... < file.sql ,也尝试“间接”运行: docker bash -c "mysql ..." < file.sql

P粉521748211P粉521748211207 天前367

全部回复(2)我来回复

  • P粉403804844

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

    可能有两种情况。

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

    回复
    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
    

    回复
    0
  • 取消回复