จากเหตุผลบางประการคำตอบส่วนใหญ่ที่นี่ไม่ได้ช่วยฉัน (อาจเกี่ยวข้องกับภาพ FROM ของฉันใน Dockerfile)
ดังนั้นฉันจึงต้องการสร้างbash script
ในพื้นที่ทำงานของฉันรวมกับ--build-arg
เพื่อจัดการคำสั่ง if ในขณะที่ Docker build โดยตรวจสอบว่าอาร์กิวเมนต์ว่างเปล่าหรือไม่
สคริปต์ทุบตี:
#!/bin/bash -x
if test -z $1 ; then
echo "The arg is empty"
....do something....
else
echo "The arg is not empty: $1"
....do something else....
fi
Dockerfile:
FROM ...
....
ARG arg
COPY bash.sh /tmp/
RUN chmod u+x /tmp/bash.sh && /tmp/bash.sh $arg
....
นักเทียบท่าสร้าง:
docker build --pull -f "Dockerfile" -t $SERVICE_NAME --build-arg arg="yes" .
หมายเหตุ: สิ่งนี้จะไปที่อื่น (เท็จ) ในสคริปต์ทุบตี
docker build --pull -f "Dockerfile" -t $SERVICE_NAME .
หมายเหตุ: สิ่งนี้จะไปที่ if (จริง)
แก้ไข 1:
หลังจากพยายามหลายฉันได้พบต่อไปนี้บทความนี้และหนึ่ง
ที่ช่วยให้ผมที่จะเข้าใจสิ่งที่ 2:
1) ARG ก่อน FROM อยู่นอกบิลด์
2) เชลล์เริ่มต้นคือ / bin / sh ซึ่งหมายความว่า if else ทำงานแตกต่างกันเล็กน้อยในโครงสร้างนักเทียบท่า ตัวอย่างเช่นคุณต้องการเพียงหนึ่ง "=" แทนที่จะเป็น "==" เพื่อเปรียบเทียบสตริง
คุณสามารถทำได้ภายในไฟล์ Dockerfile
ARG argname=false #default argument when not provided in the --build-arg
RUN if [ "$argname" = "false" ] ; then echo 'false'; else echo 'true'; fi
และในdocker build
:
docker build --pull -f "Dockerfile" --label "service_name=${SERVICE_NAME}" -t $SERVICE_NAME --build-arg argname=true .