Di Dockerfile saya , saya ingin mendefinisikan variabel yang bisa saya gunakan nanti di Dockerfile .
Saya mengetahui ENV
instruksi tersebut, tetapi saya tidak ingin variabel-variabel ini menjadi variabel lingkungan.
Apakah ada cara untuk mendeklarasikan variabel di ruang lingkup Dockerfile ?
variables
docker
dockerfile
Maxime
sumber
sumber
Jawaban:
Anda dapat menggunakan
ARG
- lihat https://docs.docker.com/engine/reference/builder/#argsumber
Setahu saya, hanya
ENV
memungkinkan itu, seperti yang disebutkan dalam " Penggantian lingkungan "Mereka harus menjadi variabel lingkungan untuk dideklarasikan ulang di setiap wadah baru yang dibuat untuk setiap baris Dockerfile
docker build
.Dengan kata lain, variabel-variabel itu tidak ditafsirkan secara langsung di Dockerfile, tetapi dalam wadah yang dibuat untuk garis Dockerfile, karenanya penggunaan variabel lingkungan.
Hari ini, saya menggunakan keduanya
ARG
( buruh pelabuhan 1.10+, dandocker build --build-arg var=value
) danENV
.Menggunakan
ARG
sendiri berarti variabel Anda terlihat pada waktu pembuatan, bukan saat runtime.Dockerfile saya biasanya memiliki:
Dalam kasus Anda,
ARG
sudah cukup: Saya menggunakannya secara khusus untuk mengatur variabel http_proxy, buruh pelabuhan itu perlu mengakses internet saat membangun.sumber
Untuk menjawab pertanyaan Anda:
Anda dapat mendefinisikan variabel dengan:
Spasi di sekitar karakter yang sama tidak diizinkan.
Dan gunakan nanti dengan:
sumber
Jika variabel digunakan kembali dalam
RUN
instruksi yang sama , seseorang dapat dengan mudah mengatur variabel shell. Saya sangat suka bagaimana mereka mendekati ini dengan Ruby Dockerfile resmi .sumber
RUN foo=$(date) && echo $foo
Anda dapat menggunakan
ARG variable defaultValue
dan selama menjalankan perintah Anda bahkan dapat memperbarui nilai ini menggunakan--build-arg variable=value
. Untuk menggunakan variabel-variabel ini dalam file buruh pelabuhan Anda dapat menyebutnya sebagai$variable
dalam menjalankan perintah.Catatan: Variabel-variabel ini akan tersedia untuk perintah Linux seperti
RUN echo $variable
dan mereka tidak akan bertahan dalam gambar.sumber