NPM을 수동으로 재시작 하지 않으면 작동이 안됩니다
안녕하세요
시놀 NAS에서 docker로 NPM을 사용주에 있습니다.
문제는 나스 재부팅 직후 npm 로그인이 안되는 것인데요,
우선
아래는 제가 사용한 사용자 정의 스크립트 입니다
docker run -d --name=nginx_proxy_manager \
-p 8341:80 \
-p 81:81 \
-p 8766:443 \
-e TZ=Asia/Seoul \
-v /volume1/docker/npm/config.json:/app/config/production.json \
-v /volume1/docker/npm/data:/data \
-v /volume1/docker/npm/letsencrypt:/etc/letsencrypt \
--restart always \
jc21/nginx-proxy-manager
실질적으로 npm이 기능상 작동하는데 지장은 없습니다.
문제는 나스를 재부팅하고 docker가 시작되는 것 까진 정상이지만
npm만 문제이고, npm로그인 (첫)화면은 뜨지만 id/pw 입력해도 전혀 반응이 없습니다.
그래서 리버스프록시 셋팅한것도 작동이 안됩니다. 예) plex.xxxxxx.com은 연결 안됨ㅠ
그래서 내부ip로 포테이너 들어가서 수동(강제)로 npm 재시작 하면 그제서야 작동됩니다.
정리하자면
나스가 재부팅하면 npm이 실행중이긴 한데 로그인이 안됩니다.
대신 npm만 재시작 하면 정상작동 됩니다.
그 이외에 npm만 중지했다 다시 시작해도 문제는 없습니다
오로지 nas를 재시작 하고 npm이 첫 실행될때만 문제가 있습니다..
무엇이 문제인지 감이 잘 안옵니다ㅠ
컨테이너 포트를 80, 81, 443 말고 다른 걸로 한 번 설정해보시는 건 어떨까요?
-p 8341:80 \
-p 81:81 \
-p 8766:443 \
이렇게 하면 80대신 8431을 사용하는게 맞는건가요?
포트 설정이 왜 3개인지는 모르겠지만
81로 들어가야 npm이 나오고
8043은 Congratulations! 나오고
8766은 400 Bad Request
The plain HTTP request was sent to HTTPS port
openresty
이런 오류가 뜹니다.
그래도 사용에 문제는 없는데 443포트로 쓰는건 저렇게 되도 상관이 없는걸까요?
그리고 컨테이너 실행시에 restart옵션을 주셨는데 사용자정의스크립트를 사용해야만 컨테이너가 뜨나요??
별도로 작업하지않으셔도 재부팅했을때 자동으로 올라올듯해서요
아~ 80과 443을 반대로 한걸 말씀하신거군요. 늦게 이해했습니다
감사합니다!
-p 8341:8341 \
-p 8181:8181 \
-p 8766:8766 \
컨테이너 포트 변경은 이런 식 입니다
시놀로지 도커 패키지 컨테이너에서 수정 하셔도 됩니다
도커포트:외부포트 이런 개념인줄 알았습니다
위 방법으로 다시 시도해보겠습니다
무조건 로컬 포트랑 컨테이너 포트를 일치 시킬 필요는 없습니다
그런데 80포트와 443포트가 다른 기본 포트다 보니
다른 곳에서 사용하는 경우가 있어서 포트가 겹칠 수 있거든요
아무곳에서도 안쓴다면 80 443 포트를 사용해도 괜찮지만
저 같은 경우는 바꿔서 npm설정 했습니다
컨테이너 포트를 80 443포트와 안 겹치게 설정 하고 로컬 포트는 편하게 설정 해도 됩니다
생각나는 해결책을 써보자면
1. Sleep 30 등으로 NPM을 늦게 시작한다.
2. 재시작하면 되신다고 하셨으니 스케쥴러로 부팅 후 어느 정도 시간이 지난 후 docker restart를 하게 만든다.
1번 안되면 2번으로 해결하면 되지 않을까 싶습니다.
아하 그럴 수도 있는거군요..
정말 죄송한데 혹시 어떻게 하는건지도 알려주실 수 있으신가요ㅠ
sleep 찾아보긴 했는데 저는 응용이 안되서 어렵습니다..
작업스케쥴러에서 만들었고 내용은 아래 대로 실행했습니다
docker run -d --name=nginx_proxy_manager \
-p 8341:80 \
-p 81:81 \
-p 8766:443 \
-e TZ=Asia/Seoul \
-v /volume1/docker/npm/config.json:/app/config/production.json \
-v /volume1/docker/npm/data:/data \
-v /volume1/docker/npm/letsencrypt:/etc/letsencrypt \
--restart always \
jc21/nginx-proxy-manager
--restart always \ <-이부분 아래에
--sleep 30
--restart
추가하면 되는걸까요?
아니면 첫 줄
docker run -d --name=nginx_proxy_manager \
을
docker run -d --name=nginx_proxy_manager sleep 30 \
으로?
그럼 30초 후에 실행되는건지 아에 sleep되는건지 모르겠습니다. 아 어렵습니다ㅋㅠ
docker run 명령어 윗줄에요.
cmt alert