![Docker는 CMD 매개변수를 전달하여 여러 명령을 실행합니다.](https://linux55.com/image/155832/Docker%EB%8A%94%20CMD%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%A0%84%EB%8B%AC%ED%95%98%EC%97%AC%20%EC%97%AC%EB%9F%AC%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%A9%EB%8B%88%EB%8B%A4..png)
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"
하지만 리디렉션된 출력이 어디로 가는지 고려해야 합니다. 위 코드에서 볼 수 있듯이 컨테이너 내부에 두 개의 파일이 있습니다. 컨테이너 외부에서 보려면 볼륨을 마운트해야 합니다.