Docker는 CMD 매개변수를 전달하여 여러 명령을 실행합니다.

Docker는 CMD 매개변수를 전달하여 여러 명령을 실행합니다.

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 runENTRYPOINT에 정의된 명령에 매개변수로 전달됩니다. 아마도 당신이 원하는 것은 이와 같은 스크립트를 가리키는 ENTRYPOINT일 것입니다.

# Do theConfiguration 
...
# Run the user commands
sh -c "$*"

간단한 경우에는 기본 매개변수와 함께 사용할 수 있습니다.

docker run name:tag pwd

더 복잡한 명령의 경우 호스트 셸의 구문 분석을 피하기 위해 모든 항목을 따옴표로 묶을 수 있습니다.

docker run name:tag "pwd > a; pwd > b"

하지만 리디렉션된 출력이 어디로 가는지 고려해야 합니다. 위 코드에서 볼 수 있듯이 컨테이너 내부에 두 개의 파일이 있습니다. 컨테이너 외부에서 보려면 볼륨을 마운트해야 합니다.

관련 정보