2013-08-04 7 views
12

나는 도커로 초기 테스트를하고 있습니다. 순간 나는 내 이미지를하고 난으로 실행 약간의 용기를 넣을 수 있습니다 :도커 컨테이너에서 서비스 자동 시작

docker ps 

내가 할 docker attach container_id 및 아파치 서비스를 시작합니다.

그런 다음 주 콘솔에서 컨테이너에 이미지를 저장합니다.

컨테이너를 종료 한 후 컨테이너를 시작하거나 커밋 된 이미지에서 새 컨테이너 하나를 실행하려고하면 서비스가 항상 중지됩니다.

서비스를 시작한 상태에서 하나의 컨테이너를 만들거나 다시 시작할 수있는 방법 (예 : apache)은 무엇입니까?

답변

25

편집 : 누군가가 SSHD와 MongoDB를 이것을 달성 내가 원래이 답변을 게시 이후 도커에 대해 많은 것을 배웠다. "Docker 컨테이너에서 자동으로 서비스 시작하기"는 Docker의 좋은 사용 패턴이 아닙니다. 대신 fleet, Kubernetes 또는 Monit/SystemD/Upstart/Init.d/Cron과 같은 것을 사용하여 Docker 컨테이너에서 실행되는 서비스를 자동으로 시작하십시오.

ORIGINAL 답변 : 명령 /bin/bash와 컨테이너를 시작하는 경우 , 다음 방법으로이 작업을 수행 할 수 있습니다 여기에 설명 : 당신이 docker run -i -t IMAGE /bin/bash로하고 경우에 컨테이너를 시작하는 경우 https://stackoverflow.com/a/19872810/2971199

그래서, 당신이 원하는 컨테이너가 시작될 때 자동으로 apache2를 시작하고 컨테이너에서 /etc/bash.bashrc을 편집하고 /usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf (또는 apache2 시작 명령이 무엇이든)을 파일 끝에있는 개행 문자에 추가하십시오.

변경 사항을 이미지에 저장하고 docker run -i -t IMAGE /bin/bash으로 다시 시작하면 첨부 할 때 apache2가 실행되고 있음을 알 수 있습니다.

+0

좋은 점 /etc/bash.bashrc –

+6

'은/etc/bash는.bashrc'는 나중에 bash가 실행될 때마다 문제를 일으킬 수 있습니다 (예를 들어'docker exec -ti ID bash'를 실행하는 것) ... 나는 이것이 시작 스크립트를 넣을 적절한 장소가 아니라고 생각합니다. apache2와 같은 서비스 –

+0

Agreed Petr. 이 답변을 게시 한 이후로 Docker에 대해 배웠습니다. 실제로 작동하면서 실제로 Docker를 실제로 사용하는 방법은 아닙니다. – damick

4

아니겠습니까? Dockerfile을 사용하여 이미지를 만들고 그 안에 CMD를 정의하면 컨테이너가 시작될 때 실행됩니다. 서비스 실행 유지에 대한 정보는 기본 사항 (https://docs.docker.com/reference/builder/)에 대한 빌더 문서를 참조하고 Run a service automatically in a docker container을 참조하십시오.

Dockerfile을 사용하여 자동화 할 필요가 없습니다. 또한 수동 커밋을 통해 이미지를 생성하고 명령 줄을 실행할 수도 있습니다. 그런 다음 실행해야하는 명령을 제공합니다 (정확히 Dockerfile CMD가 실제로 수행하는 명령 임). 이 방법으로 Dockerfiles CMD를 재정의 할 수도 있습니다. 최신 CMD 만 실행됩니다.이 CMD를 사용하여 컨테이너를 시작하면 명령 줄 명령이 실행됩니다. 설명서의 기본 docker run -i -t base /bin/bash 명령이 그 예입니다. 명령이 너무 길어지면 물론 편의 스크립트를 만들 수 있습니다.

2

의도적으로 컨테이너를 실행하는 데 사용 된 루트 프로세스가 종료되면 분리 모드에서 시작된 컨테이너가 종료됩니다. FOREGROUND 모드에서 Apache 서비스를 시작해야합니다.

docker run -p 8080:80 -d ubuntu/apache apachectl -D FOREGROUND 

참조 : https://docs.docker.com/engine/reference/run/#detached-vs-foreground

관련 문제