[docker] Dockerfile에서 스크립트 실행

Dockerfile에서 빌드 프로세스 중에 스크립트를 실행하려고합니다. 그러나 작동하지 않는 것 같습니다.

나는 그렇게 시도했다.

FROM php:7-fpm
ADD bootstrap.sh /
ENTRYPOINT ["/bin/bash", "/bootstrap.sh"]

또한이 방법 :

FROM php:7-fpm
ADD bootstrap.sh /
RUN bash -c "/bootstrap.sh"

또한 실행중인 컨테이너를 실행합니다.

docker exec symfony /bin/bash -c "/bootstrap.sh"

아무것도 작동하지 않는 것 같습니다.

어떻게하는지 알아?



답변

RUNENTRYPOINT스크립트를 실행하는 두 가지 방법입니다.

RUN즉, 중간 컨테이너를 만들고 스크립트를 실행하며 새 중간 이미지에서 해당 컨테이너의 새 상태를 고정합니다. 그 후에는 스크립트가 실행되지 않습니다. 최종 이미지는 해당 스크립트의 결과를 반영해야합니다.

ENTRYPOINT 이미지 (아직 스크립트를 실행하지 않은)가 컨테이너를 만들고 해당 스크립트를 실행 함을 의미합니다.

두 경우 모두 스크립트를 추가해야하며 a RUN chmod +x /bootstrap.sh는 좋은 생각입니다.

그것은 또한 시작해야 오두막 (같은 #!/bin/sh)

스크립트 ( bootstarp.sh: 몇 가지 git config --global명령)를 고려 하면 RUN해당 스크립트에에서 한 번만 사용하는 것이 가장 Dockerfile좋지만 올바른 사용자를 사용해야합니다 (전역 git config파일은 %HOME%/.gitconfig기본적으로 /root).

Dockerfile에 추가하십시오.

RUN /bootstart.sh

그런 다음 컨테이너를 실행할 때의 내용 /root/.gitconfig을 확인하여 스크립트가 실행되었는지 확인합니다.


답변

위의 답변 외에도 :

Windows에서 .sh 스크립트 파일을 생성 / 편집 한 경우 Unix 형식으로 끝나는 줄로 저장되었는지 확인하십시오 . 기본적으로 Windows의 많은 편집기는 Unix 줄 끝을 Windows 형식으로 변환하고 Linux는 파일 시작 부분에서 shebang (#! / bin / sh)을 인식하지 못합니다. 따라서 Linux는 shebang이없는 경우와 같은 오류 메시지를 생성합니다.

팁 :

  • Notepad ++를 사용하는 경우 “편집 / EOL 변환 / UNIX (LF)”를 클릭해야합니다.
  • Visual Studio를 사용하는 경우 ” End Of Line “플러그인을 설치하는 것이 좋습니다 . 그런 다음 Ctrl-R, Ctrl-W를 눌러 줄 끝을 표시 할 수 있습니다. Linux 스타일 엔딩을 설정하려면 Ctrl-R, Ctrl-L을 누릅니다. Windows 스타일의 경우 Ctrl-R, Ctrl-C를 누릅니다.


답변

ADD작업 디렉토리의 명령 및 사양 을 사용하여 스크립트를 작성하십시오. 이와 같이 ( “script”는 스크립트의 이름이며 /root/script.sh컨테이너에서 원하는 위치 이며 다른 경로 일 수 있습니다.

ADD script.sh /root/script.sh

이 경우 ADD이전에 와야합니다. CMDBTW가 하나 있으면 호스트 컴퓨터에서 컨테이너의 모든 위치로 스크립트를 가져 오는 멋진 방법입니다.

에서 CMD장소[./script]

자동으로 스크립트를 실행해야합니다.

당신은 또한 지정할 수 있습니다 WORKDIR/root자동으로 컨테이너를 시작할 때, 루트에 배치 you’l,


답변

로컬 파일 시스템에서 이미지로 복사 할 때 COPY대신 사용하는 것이 가장 좋습니다 ADD. 또한 콘텐츠를 저장할 하위 폴더를 만드는 것이 좋습니다. 다른 것이 없다면 일을 깔끔하게 유지합니다. 을 사용하여 스크립트를 실행 파일로 표시했는지 확인하십시오 chmod.

여기에서 scripts스크립트를 배치하고 실행할 하위 폴더를 만듭니다 .

RUN mkdir -p /scripts
COPY script.sh /scripts
WORKDIR /scripts
RUN chmod +x script.sh
RUN script.sh


답변