수색…


비고

일반적으로 각 컨테이너는 하나의 프로세스를 호스팅해야합니다. 하나의 컨테이너 (예 : SSH 서버에서 실행중인 컨테이너 인스턴스에 로그인하기 위해)에 여러 프로세스가 필요한 경우 해당 프로세스를 시작하는 쉘 스크립트를 작성할 수 있습니다. 이 경우 자신을 다루는 SIGNAL (예 : 잡힌 SIGINT 를 스크립트의 하위 프로세스로 리디렉션)에주의해야합니다. 그건 당신이 원하는 것이 아닙니다. 간단한 해결책은 supervisord 를 컨테이너 루트 프로세스로 사용하여 SIGNAL 처리 및 하위 프로세스 수명에주의를 기울이는 것입니다.

그러나 이것이 "도커 방법"이 아니라는 것을 명심하십시오. 도커 방식으로이 예제를 작성하려면 docker host (컨테이너가 실행되는 시스템)에 로그인하고 docker exec -it container_name /bin/bahs . 이 명령은 ssh가 할 때 컨테이너 내부에 쉘을 엽니 다.

Dockerfile + supervisord.conf

같은 컨테이너 안에 SSH 데몬과 함께 아파치 웹 서버 같은 여러 프로세스를 실행하려면 supervisord 를 사용할 수 있습니다.

다음과 같이 supervisord.conf 구성 파일을 작성하십시오.

[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D

[program:apache2]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"

그런 다음 Dockerfile 다음과 같이 작성하십시오.

FROM ubuntu:16.04
RUN apt-get install -y openssh-server apache2 supervisor
RUN mkdir -p /var/lock/apache2 /var/run/apache2 /var/run/sshd /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
CMD ["/usr/bin/supervisord"]

그런 다음 이미지를 만들 수 있습니다.

docker build -t supervisord-test .

나중에 실행할 수 있습니다.

$ docker run -p 22 -p 80 -t -i supervisord-test
2016-07-26 13:15:21,101 CRIT Supervisor running as root (no user in config file)
2016-07-26 13:15:21,101 WARN Included extra file     "/etc/supervisor/conf.d/supervisord.conf" during parsing
2016-07-26 13:15:21,112 INFO supervisord started with pid 1
2016-07-26 13:15:21,113 INFO spawned: 'sshd' with pid 6
2016-07-26 13:15:21,115 INFO spawned: 'apache2' with pid 7
...


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow