Apa cara paling sederhana untuk mendapatkan variabel lingkungan dari kontainer buruh pelabuhan yang belum dideklarasikan di Dockerfile ?
Misalnya, variabel lingkungan yang telah ditetapkan melalui beberapa docker exec container /bin/bash
sesi?
Saya bisa melakukannya docker exec container env | grep ENV_VAR
, tetapi saya lebih suka sesuatu yang hanya mengembalikan nilainya.
Saya sudah mencoba menggunakan docker exec container echo "$ENV_VAR"
, tetapi tampaknya terjadi substitusi di luar container, jadi saya tidak mendapatkan env var dari container, melainkan env var dari komputer saya sendiri.
Terima kasih.
bash
docker
environment-variables
Citronen
sumber
sumber
Jawaban:
Cara yang tepat untuk menjalankan
echo "$ENV_VAR"
di dalam penampung sehingga penggantian variabel terjadi di penampung adalah:sumber
docker run --rm -it CONTAINER bash -c 'echo "$MY_ENV_VAR"'
container
kata-kata sedemikian rupa sehingga orang-orang mengerti bahwa itu adalah variabelUntuk melihat semua variabel env:
Untuk mendapatkannya:
sumber
docker exec container env
dandocker exec -it container /bin/bash
kemudianenv
memuntahkan hal yang berbeda. Mengapa?docker inspect container
.docker inspect container
sepertinya memiliki batasan yang sama. Jika saya membuat variabel lingkungan setelah saya menjalankan penampung, itu tidak muncul dalam panggilan kedocker inspect
(di bagian env).bash
perintah, misalnyaalpine-node
. Jadi menggunakanexec container bash -c "echo $ENV_VAR"
tidak berhasil. Menggunakanexec container env
karya untuk kasus saya. Menggunakanexec container printenv
juga berfungsi.Anda dapat menggunakan
printenv VARIABLE
sebagai pengganti/bin/bash -c 'echo $VARIABLE
. Ini jauh lebih sederhana dan tidak melakukan substitusi:sumber
printenv
untuk mencetak semua variabel.Kelemahan penggunaan
docker exec
adalah membutuhkan wadah yang berjalan , jadidocker inspect -f
mungkin berguna jika Anda tidak yakin wadah sedang berjalan.Contoh 1. Keluarkan daftar variabel lingkungan yang dipisahkan spasi di penampung yang ditentukan:
outputnya akan terlihat seperti ini:
Contoh # 2. Keluarkan setiap env var pada baris baru dan
grep
item yang dibutuhkan, misalnya, pengaturan wadah mysql dapat diambil seperti ini:akan mengeluarkan:
Contoh # 3. Mari kita ubah contoh di atas untuk mendapatkan keluaran ramah bash yang dapat langsung digunakan dalam skrip Anda:
akan mengeluarkan:
Jika Anda ingin mempelajari lebih dalam, buka dokumentasi paket teks / template Go dengan semua detail formatnya.
sumber
docker exec
selalu bilang wadah saya tidak tahu.Tak satu pun dari jawaban di atas menunjukkan cara mengekstrak variabel dari penampung yang tidak berjalan (jika Anda menggunakan
echo
pendekatan denganrun
, Anda tidak akan mendapatkan keluaran apa pun).Cukup
run
denganprintenv
, seperti:(Perhatikan bahwa
docker-compose
alih - alihdocker
bekerja juga)sumber
printenv
untuk mencetak semua variabel.Jika kebetulan Anda menggunakan VSCode dan telah menginstal ekstensi buruh pelabuhan , cukup right+ clickpada buruh pelabuhan yang ingin Anda periksa (dalam ekstensi buruh pelabuhan ), clickdi Inspect , dan di sana cari env , Anda akan menemukan semua nilai variabel env Anda
sumber
Jawaban @ aisbaa berfungsi jika Anda tidak peduli ketika variabel lingkungan dideklarasikan. Jika Anda menginginkan variabel lingkungan, meskipun telah dideklarasikan di dalam
exec /bin/bash
sesi, gunakan sesuatu seperti:Ini tidak terlalu cantik, tapi menyelesaikan pekerjaan.
Untuk mendapatkan nilainya, gunakan:
sumber
Perintah ini memeriksa lingkungan proses tumpukan buruh pelabuhan di host:
sumber
Kita dapat memodifikasi
entrypoint
wadah yang tidak berjalan dengandocker run
perintah.Contoh menunjukkan variabel lingkungan PATH:
menggunakan
bash
danecho
: Jawaban ini mengklaim bahwaecho
tidak akan menghasilkan output apa pun, yang salah.menggunakan
printenv
sumber