2016-09-20 3 views
1

Docker를 처음 사용했습니다. 전송으로 작은 이미지를 만들려고합니다. Dockerfile 이해 CMD/ENTRYPOINT

#base image 
FROM alpine:latest 

#install Transmission 
RUN apk update 
RUN apk add transmission-daemon 

#expose port 
EXPOSE 9091 

#start app 
CMD ["/usr/bin/transmission-daemon"] 

가 그럼 난 용기 시작 :

docker run transmission 

를하고 즉시 종료 은 여기 내 Dockerfile입니다. 나는 전송 - 데몬이 실행 상태를 유지해야하므로 계속 실행될 것으로 예상한다. ENTRYPOINT도 시도했지만 결과는 같습니다. 그러나 다음 버전은 예상대로 작동합니다.

ENTRYPOINT ["/usr/bin/transmission-daemon"] 
CMD ["-h"] 

전송 실행 도움말 및 종료를 표시합니다. Docker가 컨테이너 내부에서 앱을 실행하는 방법에 대해 내가 누락 된 점은 무엇입니까?

+0

은 https://hub.docker.com/r/jess/transmission/~/dockerfile/과 비교됩니다. 마지막 2 줄은'ENTRYPOINT [ "/ usr/bin/transmission-daemon"]입니다. CMD [ "--allowed 172.12. *, 172.21. *, 172.21. *, 172.22. *, 172.23. *, 172.24. *, 172.24. *, 172.14. *, 172.16. , 17' – user2915097

+0

당신은'그것은 실행, 전송 도움말 및 종료 표시합니다. '이것은 정상이며, 끝나면 도움말을 표시하도록 요청합니다. – user2915097

답변

3

Docker는 컨테이너가 시작되는 프로세스가 활성화되어있는 한 컨테이너를 계속 실행합니다. 컨테이너가 실행될 때 데몬을 시작하면 데몬 시작 스크립트는 Docker가 감시하는 프로세스입니다. Docker가 백그라운드 프로세스를 보지 않아 스크립트가 생성되기 때문에 컨테이너가 종료됩니다.

일반적으로 CMD 또는 ENTRYPOINT은 대몬 버전이 아닌 대화 형 프로세스를 실행하고 Docker가 docker run -d으로 백그라운드에 컨테이너를 넣도록합니다. 실제 CMDENTRYPOINT의 차이는 약 giving users flexibility to run containers from your image in different ways입니다.

컨테이너에 설치된 앱을 실행하는 경우 Docker 허브를 확인하는 것이 좋습니다. There are a bunch of Transmission images on Docker Hub을 직접 사용하거나 Dockerfiles를 체크 아웃하여 이미지 작성 방법을 확인하십시오.

관련 문제