将命令中的密码从 .env 传递到 docker 内的 mysql
P粉521748211
P粉521748211 2024-03-26 09:38:42
0
2
426

我对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粉521748211
P粉521748211

全部回复(2)
P粉403804844

可能有两种情况。

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

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

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

docker exec --env-file=.env -i {image} bash -c 'mysql -uroot -p$DB_PASSWORD {database}' 
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板