นักเทียบท่าสร้างด้วย - build-arg ที่มีหลายข้อโต้แย้ง


193

ตามเอกสารประกอบมีความเป็นไปได้ที่จะกำหนด args หลายรายการสำหรับการตั้งค่าสถานะ--build-argแต่ฉันไม่สามารถหาวิธีได้ ฉันพยายามต่อไปนี้:

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

=> สิ่งนี้จะส่งคืนข้อผิดพลาด

ฉันก็ลอง:

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

=> ชุดนี้หนึ่งตัวแปร, number_of_shardsเป็นค่า "5, number_of_replicas = 2"

ความคิดใดที่ฉันสามารถกำหนดอาร์กิวเมนต์หลาย ๆ

คำตอบ:


358

ใช้--build-argกับแต่ละอาร์กิวเมนต์

หากคุณผ่านอาร์กิวเมนต์สองตัวให้เพิ่ม--build-argอาร์กิวเมนต์แต่ละตัวดังนี้:

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

63
ขอบคุณที่ล้างข้อมูลนี้ เกี่ยวกับเรื่องนี้โดยเฉพาะอย่างยิ่งความเข้าใจผิด:--help --build-arg listมันไม่ใช่รายการ!
ประสานงาน

91

คำตอบข้างต้นโดย pl_rock ถูกต้องสิ่งเดียวที่ฉันจะเพิ่มคือการคาดหวังว่า ARG ภายใน Dockerfile ถ้าไม่คุณจะไม่สามารถเข้าถึงได้ ดังนั้นหากคุณกำลังทำ

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

จากนั้นภายใน Dockerfile คุณควรเพิ่ม

ARG number_of_replicas
ARG number_of_shards

ฉันพบปัญหานี้ดังนั้นฉันหวังว่าฉันจะช่วยคน (ตัวเอง) ในอนาคต


6
คุณช่วยฉันด้วยขอบคุณมาก ให้ฉันเพิ่มเฉพาะที่ARGSต้องประกาศหลังจากFROM
Edoardo

6
ว้าวขอบคุณ! การใช้ARGไม่ได้กล่าวถึงในdocs.docker.com/engine/reference/commandline/build/ …และ--build-argไร้ประโยชน์สำหรับฉันโดยไม่ต้องARG
HeyWatchThis

19

หากคุณต้องการใช้ตัวแปรสภาพแวดล้อมในระหว่างการสร้าง ให้บอกว่าตั้งค่าชื่อผู้ใช้และรหัสผ่าน

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

คำสั่งเทอร์มินัล

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


3
ระวังว่าสิ่งนี้จะทำให้ค่าลับปรากฏให้เห็นในอิมเมจ docker โดยใช้docker historyคำสั่ง
Gary

บางครั้งคำตอบเดียวเท่านั้นที่ถูกอัปเดต! แต่คุณอธิบายได้ดีมาก ขอบคุณ!
Dupinder Singh

14

มันเป็นความอัปยศที่เราต้องการ ARG หลายอันเช่นกันมันส่งผลให้หลายเลเยอร์และทำให้การสร้างช้าลงเพราะสิ่งนั้นและสำหรับใครก็ตามที่สงสัยว่าในปัจจุบันไม่มีวิธีตั้ง ARG หลายตัว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.