Docker 컨테이너를 서비스로 실행하려고합니다. 여러 대의 서버에서 클러스터 된 서비스이며 연결하는 데 몇 초가 걸릴 수 있습니다. 컨테이너는 실제로 컨테이너를 종료하지 않고 장애 루프에서 멈추는 경우가 있습니다. 그래서 systemd는 시작을 성공적으로보고합니다. 내가 systemctl start myservice
를 실행하면이 (겉으로 때문에 docker pull
의) 시작하는 데 몇 초 정도 걸립니다,시스템 서비스 시작을위한 로그 파일 모니터링
TimeoutStartSec=60
Restart=always
RestartSec=10
ExecStartPre=-/usr/bin/docker stop %n
ExecStartPre=-/usr/bin/docker rm %n
ExecStartPre=/usr/bin/docker pull my_container
ExecStart=/usr/bin/docker run --name %n my_container
ExecStartPost=until [ /usr/bin/docker logs %n 2>&1 | grep -m 1 \"All services up and running.\" ]; do sleep 1; done
하지만, 상대적으로 빠르게 성공을 반환 : 내 유닛 파일에 이런 것들과 프로세스를 모니터링하기 위해 노력하고있어.
그러나 수동으로 docker logs -f myservice.service
을 실행하면 서비스에 "모든 서비스가 실행 중입니다."라는 메시지가 몇 초 동안 기록되지 않습니다.
나는 https://github.com/ibuildthecloud/systemd-docker을 보았습니다. 그러나 1 년 넘게 업데이트되지 않은 Repo에 대해서는 조심 스럽습니다. (대런은 Rancher와 함께 바쁜 것 같습니다.)
내 질문 : 내 ExecStartPost가 작동하지 않는 이유는 무엇입니까? systemd를 사용하여 컨테이너를 서비스로 직접 시작할 수있는 더 좋은 방법이 있습니까?
정말 시스템이 필요합니까? Docker 데몬은 프로세스를 계속 실행합니다. "run"명령에는 다시 시작 정책 옵션이 있습니다. https://docs.docker.com/engine/reference/run/#/restart-policies---restart –
필요합니다. 프로덕션 환경에서 여러 상호 의존적 인 서비스를 실행하기 때문에 깨끗하게 관리해야합니다. 나는'docker run'을 어떻게 직접 사용할 지 확신하지 못합니다. rc.local? 조작? – aayore
Docker 데몬은 프로세스 관리자입니다. "-d"및 "--restart = always"옵션을 사용하여 컨테이너를 실행하면 백그라운드에서 실행되고 실패하면 자동으로 다시 시작됩니다. –