ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 시놀로지 도커 볼륨 설정시 에러 (Docker API 실패)
    IT/시놀로지 2021. 8. 27. 22:19

     portainer로 열심히 이것저것 해보다가 간만에 다시 시놀로지 도커로 넘어왔다. 기존에 볼륨의 개념에 대해서는 알고 있었지만 시놀로지 도커에서 볼륨을 어떻게 사용해야 하는 지 몰라서 정확하게는 몇번 써보려고 했는데 잘 안되더라..... 그래서 필요하면 SSH를 쓰고 볼륨 기능자체를 사용하지 않다가 portainer를 쓰면서 볼륨 사용법을 익힌 후, 다시 시놀로지 도커로 돌아왔다. 그리고 시놀로지 도커에 볼륨을 적용해 볼려고 했는데.... 역시나 안된다.

    에러 메시지

     바뀐 점은 볼륨 설정 밖에 없다. 원인은 볼륨 설정이고, 볼륨 설정만 해제하면 컨테이너가 다시 정상적으로 실행된다. 이유가 뭘까...? portainer에서는 비슷하게 진행했을 때 됬는데... 구글링을 통해 확인해본 결과, 짐작되는 원인을 찾았고, 결국은 해결했다. 역시 구글갓

     

     원인은 간단했다. 볼륨을 설정할 때, 볼륨 폴더와 마운트시키는 폴더 구조가 유사하지 않아서 였다.

     예를 들어 톰캣 컨테이너가 있다고 하면, 톰캣의 마운트 포인트는 /usr/local/tomcat 이다. 그리고 볼륨 설정을 하면서 새로운 폴더를 만들텐데 그 폴더는 빈 폴더일 것이다.

    톰캣 폴더는 왼쪽 사진처럼 기본 파일이나 폴더들이 있을 테고, 도커에 볼륨 용으로 만든 폴더는 빈 폴더다. 두 폴더의 구조가 유사하지 않아서 에러가 발생한다. 정확하게는 컨테이너 내부의 설정 파일이나 옵션 등이 충돌해서 인거 같다.

     

     그럼 어떻게 해야하냐? 간단하다. 유사하지 않으면 유사하게 만들어주면 되지.

     

     

     

     

     

    볼륨 설정

     기존에 마운트 경로에 있던 /usr/local/tomcat를 지우고 /root 와 같은 빈 폴더를 마운트 경로로 설정한다.

    그러면 이제 톰캣 컨테이너는 정상적으로 실행이 된다.

    터미널 화면

     이제 톰캣의 마운트 포인트와 볼륨 파일을 유사하게 만들어 줄거다.

    톰캣 컨테이너를 실행한 후, 터미널로 들어가 생성 버튼을 눌러 bash를 생성한 후, 루트로 접속한다.

    그리고 아래 카피 명령어를 입력한다.

    cp -r /usr/local/tomcat /root

    톰캣 컨테이너의 볼륨 1

     위 명령어로 마운트 경로의 파일을 /root에 복사한 후, 톰캣 컨테이너의 볼륨을 확인해보면, tomcat 폴더가 생성되어 있을 것이다.

    톰캣 컨테이너의 볼륨 2

     

     그럼 이제 tomcat 내부 파일을 전체 선택하여 잘라내기 한뒤, 상위 폴더에 붙여넣기를 한다. 이후 tomcat 폴더를 삭제하면 마운트 경로인 /usr/local/tomcat와 도커의 볼륨은 완전히 같은 구조로 바뀌었다.

     

    마운트 경로 수정

    모든 준비는 다 되었다. 다시 볼륨 설정을 원래 마운트 경로인 /usr/local/tomcat 로 수정해준다.

     

    그 후, 컨테이너를 실행하면 정상적으로 실행되는 것을 확인할 수 있다.

     

     portainer의 경우, 새로 생성된 볼륨을 컨테이너에 연결하면 마운트 경로의 파일을 알아서 복사해주기 때문에 똑같이 진행하더라도 별다른 에러 없이 컨테이너가 실행된다. 그래서 당연히 시놀로지 도커에서도 당연히 되겠거니 하여 안되는 원인을 찾는 데 제법 걸렸다.

     또 원인을 찾기 어려웠던 이유 중 하나는 시놀로지 도커라고 무조건 안되는 건 아니고, 몇 가지 컨테이너들을 확인해본 결과 minecraft, tomcat, oracle 등은 오류가 나서 컨테이너가 죽어버렸지만, mysql 같은 경우에는 볼륨 폴더에 데이터가 복사되었다. 이랬다 저랬다 하니 더 찾기가 어려웠다.

     

     

    댓글

Designed by Tistory.