buruh pelabuhan membangun dengan --build-arg dengan beberapa argumen


193

Menurut dokumentasi , mungkin untuk mendefinisikan beberapa argumen untuk flag --build-arg, tetapi saya tidak bisa menemukan caranya. Saya mencoba yang berikut ini:

docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5 number_of_replicas=2 --no-cache .

=> Ini mengembalikan kesalahan.

Saya juga mencoba:

docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5,number_of_replicas=2 --no-cache .

=> Ini menetapkan satu variabel number_of_shards,, ke nilai "5, number_of_replicas = 2"

Adakah ide bagaimana saya bisa mendefinisikan banyak argumen?

Jawaban:


358

Gunakan --build-argdengan setiap argumen.

Jika Anda melewati dua argumen maka tambahkan --build-argdengan setiap argumen seperti:

docker build \
-t essearch/ess-elasticsearch:1.7.6 \
--build-arg number_of_shards=5 \
--build-arg number_of_replicas=2 \
--no-cache .

63
Terima kasih sudah membereskannya. The --helpon ini terutama menyesatkan: --build-arg list. Itu bukan daftar!
cowlinator

91

Jawaban di atas oleh pl_rock benar, satu-satunya hal yang saya tambahkan adalah mengharapkan ARG di dalam Dockerfile jika tidak, Anda tidak akan memiliki akses ke sana. Jadi, jika Anda melakukannya

docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5 --build-arg number_of_replicas=2 --no-cache .

Kemudian di dalam Dockerfile Anda harus menambahkan

ARG number_of_replicas
ARG number_of_shards

Saya mengalami masalah ini, jadi saya harap saya membantu seseorang (diri sendiri) di masa depan.


6
Anda membantu saya juga, terima kasih. Biarkan saya menambahkan hanya yang ARGSharus dideklarasikan setelahFROM
Edoardo

6
Wow terima kasih! Penggunaan ARGbahkan tidak disebutkan dalam docs.docker.com/engine/reference/commandline/build/… dan --build-argtidak berguna bagi saya tanpaARG
HeyWatchThis

19

Jika Anda ingin menggunakan variabel lingkungan selama membangun. Katakanlah pengaturan nama pengguna dan kata sandi.

username= Ubuntu
password= swed24sw

Dockerfile

FROM ubuntu:16.04
ARG SMB_PASS
ARG SMB_USER
# Creates a new User
RUN useradd -ms /bin/bash $SMB_USER
# Enters the password twice.
RUN echo "$SMB_PASS\n$SMB_PASS" | smbpasswd -a $SMB_USER

Perintah Terminal

docker build --build-arg SMB_PASS=swed24sw --build-arg SMB_USER=Ubuntu . -t IMAGE_TAG


3
Hati-hati karena ini meninggalkan nilai-nilai rahasia yang terlihat dalam gambar buruh pelabuhan menggunakan docker historyperintah.
Gary

terkadang satu-satunya jawaban teratas dibatalkan! tetapi Anda menjelaskan ini dengan sangat baik. Terima kasih!
Dupinder Singh

14

Sangat memalukan bahwa kita memerlukan beberapa ARG juga, ini menghasilkan beberapa lapisan dan memperlambat pembangunan karena itu, dan bagi siapa pun yang bertanya-tanya bahwa, saat ini tidak ada cara untuk mengatur beberapa ARG.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.