我对docker基本上一无所知。关于 bash 也没有那么多。所以:
我正在处理的 Laravel 项目的自述文件中有一个命令,它展示了如何通过从位于主机中的文件发送查询来填充本地 MySQL docker 镜像上的一些数据。
docker exec -i {image} mysql -uroot -p{password} {database} < location/of/file.sql
我想要做的是从自述文件中“隐藏”密码,并使其从 .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
.
最佳答案
您应该防止 shell 扩展局部变量(通过单引号或转义 $
)
这应该传递到容器 shell 并在那里展开:
docker exec --env-file=.env -i {image} bash -c 'mysql -uroot -p$DB_PASSWORD {database}' < location/of/file.sql
关于mysql - 将命令中的密码从 .env 传递到 docker 内的 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72971159/