code

셸 스크립트를 사용하여 도커 컨테이너 내에서 스크립트 실행

starcafe 2023. 4. 28. 21:12
반응형

셸 스크립트를 사용하여 도커 컨테이너 내에서 스크립트 실행

도커 컨테이너를 설정하기 위한 셸 스크립트를 작성하려고 합니다.내 스크립트 파일은 다음과 같습니다.

#!bin/bash

docker run -t -i -p 5902:5902 --name "mycontainer" --privileged myImage:new /bin/bash

이 스크립트 파일을 실행하면 컨테이너가 새로 호출된 bash에서 실행됩니다.

이제 스크립트 파일(테스트)을 실행해야 합니다.sh)위의 지정된 셸 스크립트에서 이미 컨테이너 내부에 있습니다.(예: cd /path/to/test).sh & & ./test.sh ) 어떻게 하는 거죠?

다음을 사용하여 실행 중인 컨테이너에서 명령을 실행할 수 있습니다.docker exec [OPTIONS] CONTAINER COMMAND [ARG...]:

docker exec mycontainer /path/to/test.sh

bash 세션에서 실행하려면 다음과 같이 하십시오.

docker exec -it mycontainer /bin/bash

여기서 스크립트를 실행할 수 있습니다.

도커 컨테이너가 가동 중이고 실행 중이라고 가정하면 다음과 같은 명령을 실행할 수 있습니다.

docker exec mycontainer /bin/sh -c "cmd1;cmd2;...;cmdn"

이 질문에 대한 답을 검색하던 중 도커 파일 솔루션에서 엔트리 포인트를 찾았습니다.

도커 파일

...
ENTRYPOINT /my-script.sh ; /my-script2.sh ; /bin/bash

이제 컨테이너를 시작하면 스크립트가 실행되고 스크립트가 실행된 후 bash 프롬프트가 표시됩니다.

실행 중인 컨테이너를 원하지 않거나 가지고 있지 않은 경우 스크립트를 직접 호출할 수 있습니다.run지휘권

반복 tty 제거-i -t인수 및 사용:

    $ docker run ubuntu:bionic /bin/bash /path/to/script.sh

이는 다른 스크립트에서도 작동합니다(테스트되지 않음).

    $ docker run ubuntu:bionic /usr/bin/python /path/to/script.py

이 명령은 나에게 효과가 있었습니다.

cat local_file.sh | docker exec -i container_name bash

로컬 디렉토리를 도커 이미지에 마운트하고 스크립트를 소스로 만들 수도 있습니다..bashrc스크립트를 모든 새 셸에서 실행하려면 스크립트가 함수로 구성되어야 한다는 것을 잊지 마십시오. (이것은 오래된 것입니다. 업데이트 공지를 참조하십시오.)

이 솔루션을 사용하여 도커 인스턴스 외부에서 스크립트를 업데이트할 수 있습니다.이렇게 하면 변경 사항이 발생해도 이미지를 다시 실행할 필요가 없고 새 셸을 엽니다. (셸을 다시 열 필요가 없습니다. 업데이트 공지 참조)

현재 디렉토리를 바인딩하는 방법은 다음과 같습니다.

docker run -it -v $PWD:/scripts $my_docker_build /bin/bash

이제 현재 디렉터리는 다음과 같습니다./scripts당신의 도커 인스턴스의.

(이전 버전)저장 방법.bashrc변경 내용은 다음 명령을 사용하여 작업 이미지를 커밋합니다.

docker commit $container_id $my_docker_build

갱신하다

모든 변경 사항에 대해 새 셸을 여는 문제를 해결하기 위해 다음 작업을 수행합니다.

도커 파일 자체에 추가합니다.RUN echo "/scripts/bashrc" > /root/.bashrc".안에서.zshrc스크립트 디렉터리를 경로로 내보냅니다.이제 스크립트 디렉터리에 하나의 파일 대신 여러 개의 파일이 들어 있습니다.이제 변경할 때마다 하위 셸을 열지 않고 모든 스크립트를 직접 호출할 수 있습니다.

참고로 컨테이너 외부에 기록 파일을 정의할 수도 있습니다.이렇게 하면 더 이상 배시 변경을 커밋할 필요가 없습니다.

Tomio의 답변은 도움이 되지만, 이미지 내부에 스크립트가 존재할 것으로 예상합니다.컨테이너 내에서 실행/테스트할 단일 스크립트가 있는 경우(명령줄에서 또는 스크립트에서 유용하게 사용),

$ docker run ubuntu:bionic /bin/bash -c '
  echo "Hello there"
  echo "this could be a long script"
  '

진입점도 살펴봅니다.여러 CMD https://docs.docker.com/engine/reference/builder/ #/entrypoint를 사용할 수 있습니다.

여러 인스턴스에서 동일한 명령을 실행하려는 경우 다음을 수행할 수 있습니다.

for i in c1 dm1 dm2 ds1 ds2 gtm_m gtm_sl; do docker exec -it $i /bin/bash -c "service sshd start"; done

이것은 오래된 것이고, 저는 논평하기에 충분한 평판 포인트가 없습니다.그래도 마빈의 아이디어를 일반화하여 매개 변수를 허용하는 방법을 공유할 가치가 있다고 생각합니다.

docker exec -i mycontainer bash -s arg1 arg2 arg3 < mylocal.sh

언급URL : https://stackoverflow.com/questions/31578446/running-a-script-inside-a-docker-container-using-shell-script

반응형