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

标签 mysql bash docker environment-variables exec

我对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/

相关文章:

php - 从数据库中删除记录并将其保存到文件中 - PHP

linux - Bash - 获取带有颜色代码的子字符串

docker - 在使用docker运行jmeter进行分布式负载测试时,是否可以定义在每个从属计算机上应运行多少负载

docker - 在Spring Cloud Data Flow服务器上部署dockerized应用

mongodb - MongoDB无法从boot2docker写入docker中的本地数据库

sql - 用于在 MySQL 中遍历树的深度嵌套子查询

php - 使用后数组数据创建必须单独执行的多个表单

php - Laravel 查询构建器中留下的 SQL 连接

bash - 如何删除分隔文件中标签之间的空格?

linux - bin执行错误