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?

Emilien Brigand
sumber

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 .
pl_rock
sumber
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.

Javier Perez
sumber
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

Fakabbir Amin
sumber
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.

v1adko
sumber