Saya pada asasnya tidak tahu apa-apa tentang buruh pelabuhan. Tidak begitu banyak tentang bash sama ada. Jadi:
Terdapat arahan dalam fail readme projek Laravel yang sedang saya kerjakan yang menunjukkan cara mengisi beberapa data pada imej docker MySQL tempatan dengan menghantar pertanyaan daripada fail yang terletak dalam mesin hos.
docker exec -i {image} mysql -uroot -p{password} {database} < location/of/file.sql
Apa yang saya mahu lakukan ialah "sembunyikan" kata laluan daripada README dan minta ia dibaca daripada fail .env
Jadi, saya nak buat macam ni:
docker exec --env-file=.env -i {image} mysql -uroot -p$DB_PASSWORD {database} < location/of/file.sql
Saya telah menguji docker ... printenv
确实显示了文件中的变量。但是回显其中一个会输出一个空行: docker ... echo $DB_PASSWORD
dan menggunakannya untuk menjalankan arahan MySQL memberi saya "Akses ditolak untuk pengguna 'root'@'localhost'"
Saya cuba menjalankan arahan MySQL "secara langsung": docker ... mysql ... < file.sql
,也尝试“间接”运行: docker bash -c "mysql ..." < file.sql
. p>
Mungkin ada dua situasi.
Anda harus menghalang shell daripada mengembangkan pembolehubah setempat (melalui petikan tunggal atau melarikan diri
$
)Ini harus dihantar ke cangkang bekas dan dikembangkan di sana: