[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"
아무것도 작동하지 않는 것 같습니다.
어떻게하는지 알아?
답변
RUN
및 ENTRYPOINT
스크립트를 실행하는 두 가지 방법입니다.
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
이전에 와야합니다. CMD
BTW가 하나 있으면 호스트 컴퓨터에서 컨테이너의 모든 위치로 스크립트를 가져 오는 멋진 방법입니다.
에서 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