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

반응형