gluetun재시작 및 재부팅 시 연결된 컨테이너 자동 재시작 하기
gluetun의 네트웍 아래 있는 컨테이너들은 시스템 재부팅하거나 gluetun이 종종 재시작 되면 네트웍 연결이 끊기는데요
아주 조잡하지만 그나마 자동으로 해결되는 방법입니다
gluetun의 uptime을 체크해서 1시간 이하면 torrent 컨테이너를 재시작 시키는 스크립트를 만들어서 스케쥴에 등록했습니다
# 모듈을 임포트합니다.
import docker
import datetime
import os
import subprocess# 도커 클라이언트 객체를 생성합니다.
client = docker.from_env()# 도커 컨테이너를 가져옵니다.
container = client.containers.get("gluetun")status = container.status
# 컨테이너가 실행 중면 uptime을 계산합니다.
if status == "running":
# 컨테이너가 시작된 시간을 가져옵니다.
start_time = container.attrs["State"]["StartedAt"][:-4] + 'Z'
# 현재 시간과 시작 시간의 차이를 계산합니다.
uptime = datetime.datetime.now() - datetime.datetime.strptime(start_time, "%Y-%m-%dT%H:%M:%S.%fZ")
# uptime을 시간 단위로 변환합니다.
uptime_hours = uptime.total_seconds() / 3600
# uptime을 소수점 둘째 자리까지 반올림합니다.
uptime_hours = round(uptime_hours, 2)
else:
# 컨테이너가 실행 중이 아니면 uptime을 None으로 설정합니다.
uptime_hours = None
# uptime을 출력합니다.
print(f"Uptime: {uptime_hours} hours")# uptime_hours가 1보다 작은지 확인합니다.
if uptime_hours < 1:# deluge-vpn을 재시작 합니다
os.system("docker compose -f /data/docker/deluge-vpn/docker-compose.yml restart")
# 재시작 완료 메시지를 출력합니다.
print("deluge-vpn restarted successfully")
else:
# uptime_hours가 2보다 크거나 같으면 메시지를 출력합니다.
print("gluetun uptime is not less than 1 hours")
제가 짠 코드는 아니고 chatgpt에게 만들어 달라고 했습니다
전 파이썬 할 줄 몰라요 ㅠㅠ
이걸 실행 하려면 파이썬과 모듈들이 설치 되어 있어야 됩니다
이 코드를 delugevpn-restart.py 처럼 파이썬 파일로 저장 해주고 cron이나 systemd timer에 등록하면 됩니다
systemd timer에 30분마다 실행하게 해두니 아직까진 잘 작동 하네요
만약 잘 안되면 docker compose restart 말고 docker compose down후 조금 기다렸다가 docker compose up -d 로 바꾸면 될듯합니다
테스트삼아 재부팅 해봤는데
systemd timer 로그에 업타임과 재시작 로그가 잘 나오네요
아주 조잡한 방법인데 어떻게 해야 되나 몰라서 이렇게 라도 해 뒀습니다
저같은 분들게 도움되길...
더 좋은 깔끔한 방법 있으면 알려주세요 ㅠㅠ
근데 vpn의 연결이 끊겨서 gluetun이 vpn 재연결을 위해 재시작 되었을시에는 그게 소용 없더라구요 ㅠㅠ
그래서 gluetun과 deluge를 하나로 안묶고 따로 만들어서 사용하고있어요
https://stackoverflow.com/questions/65778431/using-depends-on-doesnt-start-required-container-but-starts-containers-dependi
참고하시면 좋을 것 같슴다
글을 쓴 이후로 도커만으로 해결 할 방법이 없을까 알아보다가 다른 방법을 만들긴 했습니다
gluetun과 deluge를 하나의 compose파일에 묶으면 docker restart가 먹히고 따로 만들면 docker restart가 안먹힙니다
따로 묶었을 때 gluetun이 재시작 되면 기존의 네트워크가 지워지고 새로 만들어져서 deluge를 재시작 하려 시도하면 에러가 나는 듯해서 gluetun에 고중 network을 하나 잡아주고 유지되게 만들었네요
요약하면 netwok 만들어서 할당해주고 autoheal로 헬스체크해서 문제 생기면 자동으로 재시작하게 해두고 잘 되나 체크 중입니다
cmt alert