2014-12-19 4 views
0

이 dockerfile을 순진하게 사용하고 싶습니다.웹 서버를 시작하고 일부 요구 사항에 맞게 Dockerfile을 작성하는 방법

FROM test/tomcat 
ENV CATALINA_HOME /tomcat 
RUN ${CATALINA_HOME}/bin/catalina.sh start 
RUN wget localhost:8080/Writer/WriterServlet 

이 경우 확실히

docker build --no-cache=true - < Dockerfile 
Sending build context to Docker daemon 3.072 kB 
Sending build context to Docker daemon 
Step 0 : FROM test/tomcat 
---> 2a85ccb3dd07 
Step 1 : ENV CATALINA_HOME /tomcat 
---> Running in 76872d1acdd5 
---> 30ad1fe832d6 
Removing intermediate container 76872d1acdd5 
Step 2 : RUN ${CATALINA_HOME}/bin/catalina.sh start 
---> Running in 5947560a3428 
Tomcat started. 
---> ea670dd1d3ff 
Removing intermediate container 5947560a3428 
Step 3 : RUN wget localhost:8080/Writer/WriterServlet 
---> Running in 6aa5c9be8569 
--2014-12-19 03:08:16-- http://localhost:8080/Writer/WriterServlet 
Resolving localhost (localhost)... ::1, 127.0.0.1 
Connecting to localhost (localhost)|::1|:8080... failed: Connection refused. 
Connecting to localhost (localhost)|127.0.0.1|:8080... failed: Connection refused. 
2014/12/19 11:08:16 The command [/bin/sh -c wget localhost:8080/Writer/WriterServlet] returned a non-zero code: 4 

결과는 다음과 Tomcat이 파일을 작성하는 몇 가지 인터페이스를 제공하고, 그래서 바람둥이 서버를 통해 구축해야 .

아마도 wget이 시작할 때까지 Tomcat을 기다릴 수 없기 때문일 수 있습니다.

또는 docker의 계층화 된 컨테이너 구조로 인해 3 단계 (wget)에서 다시 바람둥이가 내려 가기 때문에.

내 질문에 요약하면 대화 형 요구 사항에 따라 일부 프로세스가 함께 작동하도록 도커 빌드를 작성할 수 있습니까?

+0

'RUN $ {CATALINA_HOME} /bin/catalina.sh start && wget localhost : 8080/Writer/WriterServlet' 또는 첫 번째 단계에서 시간을 정할 수 있다면'RUN $ {CATALINA_HOME} /bin/catalina.sh start && sleep XX && wget localhost : 8080/Writer/WriterServlet' <- 아주 좋은 해결책은 아닙니다. –

답변

1

Docker 파일 빌드 단계는 실행중인 컨테이너 또는 시스템을 유지 관리하지 않습니다. 각 행은 파일 시스템을 변경하고, docker는 변경 사항을 파일 시스템에만 저장합니다. 시작된 프로세스는 버려집니다.

Docker는 컨테이너가 실행될 때만 (컨테이너 작성 시가 아니라) 장기 실행 프로세스를 시작할 수 있습니다. 컨테이너 시작시 사용자 정의 스크립트를 호출하려면 ENTRYPOINT 또는 CMD를 사용해야합니다. 이 스크립트는 tomcat을 시작하고 wget을 실행하고 tomcat 로그의 꼬리와 같이 장시간 실행되는 프로세스를 시작하기 전에 필요한 모든 변경을 수행합니다.

관련 문제