2017-11-29 6 views
1
나는 고정 표시기 이미지에 shellinabox와 레디 스를 결합이

을 실행dockerfile cmd를 여러 명령

내 Dockerfile 단순히 다음과 같습니다 :.

CMD ['/usr/local/work/scripts/run.sh'] 

ENTRYPOINT ["bin/bash"] 

EXPOSE 4200/tcp 

run.sh 다음과 같습니다 :

#!/bin/bash 
cd $REDIS_HOME 
src/redis-server 
/usr/bin/shellinaboxd -p 4200 

나는 도커가 시작할 때 redis 서버와 shellinabox를 시작하고 싶다. redis에 의한 시작입니다.

도커를 시작하고 ctrl + c를 사용하면 shellinabox가 시작을 시작합니다.

'감독자'를 사용하는 방법을 알고 있습니다. 누구나 쉘 스크립트 사용법을 알고이 두 서비스를 시작 하시겠습니까?

+0

'redis-server --daemonize yes'를 시도해 볼 수 있습니다. 백그라운드에서 redis-server를 실행해야합니다. – yamenk

답변

0

도커 철학에서 컨테이너 당 하나의 프로세스가 있어야하며 도커 작성을 사용하여 redis 용 컨테이너 하나와 shellinaboxd 용 컨테이너 두 개를 시작할 수 있습니다.

그러나 때로는 쉽게 또는 다른 이유이다 : 그것은 다음 (예에 의한 Ctrl + C와 함께) 중지 될 때까지, 스크립트 쉘에서

"SRC/레디 스 서버 '출시 레디 스 및 콘솔에 연결 유지 shellinaboxd를 발사하십시오.

"src/redis-server"를 "nohup src/redis-server &"으로 바꾸면 redis가 fork 프로세스로 시작되고 shellinaboxd가 시작됩니다. 고정 표시기-작성과

해결 방법 :이 entrypoint.sh에서 백그라운드에서 서비스를 시작해서는 안

version: '2' 
services: 
    redis: 
    build: ./Dockerfile 
    command: /usr/bin/src/redis-server 
    shellinabox: 
    build: ./Dockerfile 
    ports: 
     - 4200:4200 
    command: /usr/bin/shellinaboxd -p 4200 
0

! docker-stop 명령은 컨테이너의 PID 1에만 SIGINT를 보내서 시스템 종료를 깨끗하게 허용합니다. 10 초 후 나머지 프로세스는 SIGKILL이됩니다. entrypoint.sh에 "trap"파트가 없으면 포함 된 데이터를 쉽게 파기 할 수 있습니다.

https://github.com/gdraheim/docker-systemctl-replacement에서 작업하는 동안 이러한 세부 정보를 배웠으므로 초기화 대체 장치로도 실행할 수 있습니다. 이 모드에서 CMD /usr/bin/systemctl.py라고 말하면 활성화 된 모든 systemD 서비스는 ExecStart 시퀀스가 ​​실행됩니다. 도커 - 멈춤 (docker-stop)시에는 ExecStop이 정상적으로 종료되도록 실행됩니다.

하나의 컨테이너에서 여러 서비스를 실행하는 방법입니다.