Docker가 실행되면 몇 가지 구성을 수행해야 합니다.
그래서 모든 설정을 넣고 다음과 같이 ./init.sh
설정했습니다 .ENTRYPOINT
ENTRYPOINT ["./init.sh"]
그러나 사용자로부터 다른 명령을 실행해야 합니다. 예를 들어,
docker run -it name:tag pwd > a; pwd > b
위의 명령은 분명히 작동하지 않습니다!
그러면 저는 여기에 갇히게 됩니다. 위와 같은 명령을 전달하면 ENTRYPOINT
다음과 같이 될 것이라고 믿습니다.
ENTRYPOINT ["./init.sh", "pwd", ">", "a", ";", "pwd", ">", "b"]
옳은? 이는 아래의 모든 매개변수를 구문 분석하고 에서 실행해야 한다는 의미입니까 init.sh
? 이를 달성하는 더 좋고 올바른 방법이 있습니까?
답변1
명령의 최종 매개변수는 docker run
ENTRYPOINT에 정의된 명령에 매개변수로 전달됩니다. 아마도 당신이 원하는 것은 이와 같은 스크립트를 가리키는 ENTRYPOINT일 것입니다.
# Do theConfiguration
...
# Run the user commands
sh -c "$*"
간단한 경우에는 기본 매개변수와 함께 사용할 수 있습니다.
docker run name:tag pwd
더 복잡한 명령의 경우 호스트 셸의 구문 분석을 피하기 위해 모든 항목을 따옴표로 묶을 수 있습니다.
docker run name:tag "pwd > a; pwd > b"
하지만 리디렉션된 출력이 어디로 가는지 고려해야 합니다. 위 코드에서 볼 수 있듯이 컨테이너 내부에 두 개의 파일이 있습니다. 컨테이너 외부에서 보려면 볼륨을 마운트해야 합니다.