我对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>
可能有两种情况。
您应该防止 shell 扩展局部变量(通过单引号或转义
$
)这应该传递到容器 shell 并在那里展开: