재시작 정책의 영구적 구성

안녕하세요,

저는 launcher 스크립트를 사용하여 discourse_docker 저장소로 내부 Discourse 인스턴스를 실행하고 있습니다. OS 업그레이드/재부팅 시 docker 컨테이너가 정지된 상태로 유지되도록, 재시작 정책을 always에서 unless-stopped으로 영구적으로 변경하고 싶습니다.

재시작 정책이 launcher 스크립트의 변수임을 확인할 수 있는데, 새 컨테이너가 빌드될 때 이 설정을 유지하는 가장 좋은 방법은 무엇인가요? "launcher rebuild"를 사용할 때와 /admin/upgrade를 통해 docker_manager를 사용할 때 모두 작동해야 합니다.

미리 감사드립니다.
감사합니다.
.sascha

다른 사람들이 이런 질문을 한 적이 있는지 기억나지 않고, 명확한 방법도 보이지 않습니다. 제가 생각하기에 가장 좋은 방법은 다음과 같습니다.

  ./launcher destroy app

이렇게 하면 앱이 계속 중지된 상태를 유지하며, 다시 시작하려면 다음 명령을 사용하세요.

  ./launcher start app

이 작업은 컨테이너를 삭제하므로, 컨테이너 내부에서 수행한 변경 사항(예: docker_manager를 통한 업그레이드)도 함께 삭제됩니다.

아, 그런데 이 정보가 있습니다:

https://stackoverflow.com/questions/26852321/docker-add-a-restart-policy-to-a-container-that-was-already-created
요약하자면: 각 재빌드 후 docker update --restart=unless-stopped app을 실행하세요.

네, 그거 압니다 :wink: 지금 도커 업데이트를 진행 중이에요. 하지만 다음 리빌드 중 어느 시점에 잊어버릴까 봐 걱정되네요. 그래서 영구적으로 유지하는 방법에 대해 질문드린 겁니다.
또 다른 옵션은 런처 스크립트를 직접 수정해서 pull 시에 리베이스 충돌이 너무 많지 않기를 바라는 거겠죠 :wink:

부팅 후 재시작에 문제가 있었던 유일한 경우는 app.yml에서 web_only.yml로 전환한 후 app 컨테이너를 제거하는 것을 잊었을 때입니다. 저는 도커 업그레이드와 재부팅을 정기적으로 수행하고 있으며, 자동 시작 관련 문제는 전혀 없습니다. 참고로, 지난 5년 동안 이 문제에 대해 우려하는 다른 사용자는 본 적이 없습니다. 제가 알지 못하는 특수한 상황이 있는 것이 아니라면, 걱정하지 않으셔도 될 것 같습니다.

오늘 문제는 제가 2.4.0-betaXYZ라는 이상한 버전을 사용 중이었는데, 이 버전이 자동으로 업데이트가 되지 않아서 새로 설치를 하고 싶었기 때문이었습니다. 다른 VM에서 깨끗한 상태로 설치하고 2.7.12 백업을 복원하는 테스트를 해봤는데 완벽하게 작동했습니다 (데이터 컨테이너를 redis와 postgres로 분리하기도 했습니다).

그런데 메인 서버는 여전히 오래된 Ubuntu와 Docker를 사용 중이어서, 저는 다음을 하려고 했습니다:

  1. 백업 만들기
  2. Discourse 종료
  3. Discourse를 신경 쓰지 않고 여러 재부팅을 포함하여 OS 업그레이드 작업 수행
  4. 새로 설치
  5. 백업 복원

저는 컨테이너를 그냥 꺼두되 바로 삭제하지 않으려 했습니다. 테스트 중에 제가 잊어버린 컨테이너 내의 필요한 데이터가 있는지 확실하지 않았기 때문입니다. 그리고 저는 'unless-stopped’가 제게 완벽한 재시작 정책이라고 생각했습니다. 이 정책은 컨테이너가 재부팅 후 자동으로 시작되도록 보장하되, 제가 수동으로 멈추지 않는 한 계속 실행되니까요. 평소 제가 원하는 바로 그런 방식이어서, 왜 이것을 영구적으로 설정해 보지 않나 생각했습니다.

가능하지 않다면 큰 문제는 아닙니다. :slight_smile: 그냥 docker 업데이트를 하면 됩니다 (혹시 제가 너무 자주 잊어버리면, 5분마다 cron으로 docker 업데이트를 수행하는 것도 방법이고요 ;))