我對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 並在那裡展開: