SW Engineering/DevOps, SRE
[Docker] 컨테이너실행시 sh 스크립트 호출과 매개변수 사용
SungWookKang
2023. 9. 7. 10:07
반응형
[Docker] 컨테이너실행시 sh 스크립트 호출과 매개변수 사용
l Docerk, Shell script
Dockerfil을 제작하면서, 컨테이너 실행시 특정 쉘 스크립트를 실행할 때, 쉘 스크립트 실행에 필요한 파라메터 값을 받아오지 못하는 문제가 있었다. (도커의 문제가 아닌 나의 코드 오류 문제) 단독으로 쉘 스크립트를 실행하면 정상적으로 실행되는데, 유독 컨테이너 실행시에만 그 값을 받지 못하였다. 해결 방법은 매우 간단하게 Dockerfile에서 사용한 ENV 환경변수를 그대로 쉘 스크립트에서 사용하면 되는거였다. (너무 어렵게 생각해서 문제를 해결하지 못한 것이었다.)
[잘못된 예시]
abc.sh에서 인풋 변수로 값을 사용할 수 있도록 read 명령어를 사용하였으며, 해당 변수로 받은 값을 출력하려고 작성.
abc.sh |
#!/usr/bin/env bash read var1 read var2 echo $var1 echo $var2 |
컨테이너 실행시 ENTRYPOINT에서 abc.sh를 실행하면서 파라메터를 전달하려고 작성.
Dockerfile |
FROM ~~~~ ENV sh_var1 var1_value ENV sh_var2 var2_value ENTRYPOINT [“abc.sh”, “$sh_var1”, “$sh_var2”] |
[정상 예시]
abc.sh |
#!/usr/bin/env bash #read var1 <- 인풋 변수 삭제 #read var2 <- 인풋 변수 삭제 echo $sh_var1 #<- dockerfile ENV 변수를 그대로 가져다 사용 echo $sh_var2 #<- dockerfile ENV 변수를 그대로 가져다 사용 |
Dockerfile |
FROM ~~~~ ENV sh_var1 var1_value ENV sh_var2 var2_value ENTRYPOINT [“abc.sh”] #<- ENTRYPOINT호출시 sh 파일만 실행 |
물론 위 방법 외에도 다양한 사용법이 있을텐데, 우선 나의 코드에서는 각각의 변수를 호출해서 사용하려고 해서 발생한 문제로, 도커파일과 쉘 스크립트간의 매개변수 전달에 대한 이해가 부족해서 발생한 문제였다.
2023-09-07 / Sungwook Kang / https://sungwookkang.com
도커파일, dockerfile, 쉘스크립트, shell script, 매개변수, 도커환경변수, docker env, shell read
반응형