Dockerfile에서 cat 및 for-loop를 사용하는 방법

Dockerfile에서 cat 및 for-loop를 사용하는 방법

다음을 수행하는 쉘 스크립트가 있는데 Dockerfile에서 이를 수행하고 싶습니다. 이 작업을 수행하는 방법을 아는 사람이 있나요? 명령을 실행할 수 있지만 sedfor 루프에는 운이 없습니다.

org="$(cat org-template.yml)"

for i in {1..10}
do
   temp=$org
   temp="${temp/ENDPOINT/$endpoint}"
   temp="${temp/AUTH_TOKEN/$access_token}"
   temp="${temp/LABEL_TOKEN/$i}"
   final_template="${final_template}\n${temp}"
done

final_template="${final_template//
/\\n}"

sed "s#ORGANIZATIONREQUESTS#${final_template}#g" ./performance-tests.yml > /tmp//performance-tests.yml

답변1

이러한 종류의 문제에 대한 일반적인 해결책은 Dockerfile과 함께 셸 스크립트를 넣고 지침을 사용하여 COPY이를 컨테이너에 복사한 다음 RUN컨테이너에 복사하는 것입니다.

유일한 대안은 전체 스크립트를 적절하게 이스케이프된 인수로 전달하는 것입니다 . 그러면 읽기가 좋지 않습니다. 어쨌든 컨테이너에 bash -c있어야 합니다 . org-template.yml따라서 솔직히 이 두 파일을 컨테이너에 복사하는 것이 가장 간단하고 유지 관리가 쉬운 솔루션인 것 같습니다.

또한 YAML에 대한 사항은 다음과 같습니다. YAML을 처리하려면 셸 교체를 사용하는 것보다 적절한 yaml 도구를 사용하는 것이 좋습니다. sed유틸리티가 yq더 안전하고 나중에 손상되지 않습니다.

관련 정보