Từ một số lý do mà hầu hết các câu trả lời ở đây không giúp được tôi (có thể nó liên quan đến hình ảnh FROM của tôi trong Dockerfile)
Vì vậy, tôi muốn tạo một bash script
trong không gian làm việc của mình kết hợp với --build-arg
để xử lý câu lệnh if trong khi Docker xây dựng bằng cách kiểm tra xem đối số có trống hay không
Tập lệnh bash:
#!/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:
docker build --pull -f "Dockerfile" -t $SERVICE_NAME --build-arg arg="yes" .
Lưu ý: Điều này sẽ chuyển sang khác (sai) trong tập lệnh bash
docker build --pull -f "Dockerfile" -t $SERVICE_NAME .
Nhận xét: Điều này sẽ chuyển đến if (true)
Chỉnh sửa 1:
Sau nhiều cố gắng tôi đã tìm thấy sau bài báo và điều này một
mà đã giúp tôi hiểu được 2 điều:
1) ARG trước FROM nằm ngoài bản dựng
2) Shell mặc định là / bin / sh có nghĩa là if else hoạt động hơi khác một chút trong bản dựng docker. ví dụ: bạn chỉ cần một "=" thay vì "==" để so sánh các chuỗi.
Vì vậy, bạn có thể làm điều này bên trong Dockerfile
ARG argname=false #default argument when not provided in the --build-arg
RUN if [ "$argname" = "false" ] ; then echo 'false'; else echo 'true'; fi
và trong docker build
:
docker build --pull -f "Dockerfile" --label "service_name=${SERVICE_NAME}" -t $SERVICE_NAME --build-arg argname=true .