작성
·
296
1
ssh 설치 후 서비스를 올리고 싶은데
아래 3가지를 다 적용을 해도 서비스가 실행이 안됩니다.
Dockerfile
docker run 이후
service ssh start 명령으론 정상 작동 됩니다.
답변 1
0
안녕하세요!
도커 컨테이너가 실행되는 것과 리눅스 서버 실행의 차이를 알면 좋을 것 같습니다.
1. RUN 명령어에서 서비스 실행하기
도커 컨테이너에서 프로세스를 실행하려면 반드시 CMD에 정의합니다. 그 이전 RUN에 실행되는 명령어는 그 결과가 도커 이미지로 저장될 뿐 실제 프로세스가 실행되는 시점은 컨테이너가 실행되면서 CMD 부분에 정의된 것입니다.
2. CMD에 service 시작
CMD에서 서비스를 실행하면 실제로 실행이 되지만, ssh 서버가 백그라운드로 실행되기 때문에 바로 컨테이너가 종료됩니다. 컨테이너가 실행되고 계속 떠 있으려면 프로세스가 실행중이여야 합니다.
따라서 ssh 서비스를 실행하고 프로세스가 종료되지 않도록 해야 합니다.
CMD service ssh start && tail -f /var/log/lastlog
임의로 프로세스가 멈추지 않게 로그를 보거나
CMD ["/usr/sbin/sshd", "-D"]
ssh를 백그라운드가 아닌 포그라운드로 실행하면 됩니다.
3. 주의할점
일반적으로 컨테이너를 만들때 ssh 서버를 포함하는것은 보안상의 이유로 권장하지 않습니다.
보통 한번에 하나의 프로세스를 실행하는걸 권장하지만 여러개의 프로세스를 실행하는 것도 허용합니다.
프로세스를 실행하는 여러가지 방법이 있는데 supervisord를 많이 이용합니다.
추가로 궁금한점 있으면 문의주세요!
감사합니다.