xây dựng docker với --build-arg với nhiều đối số


192

Theo tài liệu , có thể định nghĩa nhiều đối số cho cờ --build-arg, nhưng tôi không thể tìm hiểu làm thế nào. Tôi đã thử như sau:

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

=> Điều này trả về một lỗi.

Tôi cũng đã thử:

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

=> Điều này đặt một biến, number_of_shardsthành giá trị "5, number_of numplicas = 2"

Bất kỳ ý tưởng làm thế nào tôi có thể xác định nhiều đối số?

Câu trả lời:


355

Sử dụng --build-argvới từng đối số.

Nếu bạn đang truyền hai đối số thì thêm --build-argvới mỗi đối số như:

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

62
Cảm ơn cho thanh toán bù trừ này lên. Điều --helpnày đặc biệt sai lệch : --build-arg list. Đây không phải là một danh sách!
chăn bò

91

Câu trả lời trên của pl_rock là chính xác, điều duy nhất tôi muốn thêm là mong đợi ARG bên trong Dockerfile nếu không bạn sẽ không có quyền truy cập vào nó. Vì vậy, nếu bạn đang làm

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

Sau đó, bên trong Dockerfile bạn nên thêm

ARG number_of_replicas
ARG number_of_shards

Tôi đã gặp phải vấn đề này, vì vậy tôi hy vọng tôi sẽ giúp được ai đó (bản thân mình) trong tương lai.


6
bạn cũng giúp tôi, cảm ơn Hãy để tôi thêm chỉ ARGSphải khai báo sauFROM
Edoardo

6
Ồ cảm ơn nhé! Việc sử dụng ARGthậm chí không được đề cập trong docs.docker.com/engine/reference/commandline/build/iêu--build-argvô dụng đối với tôi mà không cóARG
HeyWatch This 8/12/18

19

Nếu bạn muốn sử dụng biến môi trường trong quá trình xây dựng. Hãy nói rằng thiết lập tên người dùng và mật khẩu.

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

Lệnh đầu cuối

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


3
Coi chừng việc này để lại các giá trị bí mật hiển thị trong hình ảnh docker bằng docker historylệnh.
Gary

đôi khi câu trả lời hàng đầu duy nhất được nâng cao! nhưng bạn đã giải thích điều này rất tốt. Cảm ơn bạn!
Dupinder Singh

13

Thật đáng tiếc khi chúng ta cũng cần nhiều ARG, nó dẫn đến nhiều lớp và làm chậm quá trình xây dựng vì điều đó và đối với bất kỳ ai cũng tự hỏi rằng, hiện tại không có cách nào để đặt nhiều ARG.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.