urandom, random, 난수생성기, 구형시놀로지나스, 도커, phpMyAdmin뿐만 아니라 GitLab이 DS716+ 및 이하 모델에서 지원안되는 이유 중 하나 입니다.
안녕하세요!
오늘은 제가 직접 겪었던 시놀로지 NAS에서의 Docker 컨테이너 실행 오류와 그 해결 과정을 공유하고자 합니다. 결론은 해결이 안되었습니다. 특히 구형 모델인 DS716+ (DSM 7.1.1) 환경에서 phpMyAdmin Docker 컨테이너를 실행하려다 만난 AH00141: Could not initialize random number generator 오류와 씨름했던 경험을 상세히 나누어 보겠습니다. 저와 비슷한 문제로 골머리를 앓고 계신 분들께 조금이나마 도움이 되기를 바랍니다.
1. 목표와 첫 번째 난관: phpMyAdmin 컨테이너의 무한 재시작
저의 목표는 Docker를 이용하여 MariaDB 데이터베이스(mariadb)를 구축하고, 이를 웹에서 편리하게 관리하기 위해 phpmyadmin 컨테이너를 실행하는 것이었습니다. 나중에 데이터베이스를 다른 환경으로 쉽게 옮기기 위해 Docker 환경을 선호했죠.
mariadb 컨테이너는 voca-net(제가 만든 네트워크)이라는 Docker 네트워크에 연결하여 문제없이 생성했습니다. 하지만 phpmyadmin 컨테이너를 실행하자마자 문제가 발생했습니다. 컨테이너는 시작과 동시에 종료되기를 반복하며 무한 재시작 루프에 빠졌습니다. 로그를 확인해 보니 다음과 같은 에러 메시지가 가득했습니다.
"난수 생성기를 초기화할 수 없다"는 이 메시지가 모든 문제의 시작이었습니다.
2. 해결을 위한 여정: 삽질의 연속
웹 검색을 통해 이 오류가 Docker 컨테이너가 호스트의 난수 생성 장치(/dev/random, /dev/urandom)에 접근하는 데 문제가 있을 때 발생한다는 것을 알게 되었습니다. 추천되는 여러 해결 방법들을 차례로 시도했습니다.
- 시도 1: /dev/urandom 읽기 전용 마운트 (-v /dev/urandom:/dev/random:ro) 가장 일반적인 해결책으로 알려진 방법입니다. 호스트의 논블로킹 난수 생성기를 컨테이너 내부에 읽기 전용으로 마운트했습니다.
- 결과: 실패. 동일한 AH00141 오류 발생 및 무한 재시작.
- 시도 2: /dev/urandom 읽기/쓰기 마운트 (-v /dev/urandom:/dev/random) 혹시 읽기 전용이 문제일까 싶어 :ro 옵션을 제거했습니다.
- 결과: 실패. 여전히 동일 오류.
- 시도 3: /dev/random 직접 마운트 (-v /dev/random:/dev/random 또는 :ro 포함) /dev/urandom 대신 /dev/random을 직접 마운트 해보았습니다.
- 결과: 실패. 변화 없음.
- 시도 4: 특정 버전 이미지 사용 (phpmyadmin:5.2) 최신(latest) 이미지 자체의 문제일 수 있다는 생각에, 약간 이전 버전인 5.2 태그를 사용했습니다.
- 결과: 실패. 동일 오류.
- 시도 5: 특권 모드 사용 (--privileged) 권한 문제일 가능성을 염두에 두고, 보안 위험을 감수하고 --privileged 옵션을 부여했습니다. 컨테이너에게 호스트의 거의 모든 권한을 주는 방법입니다.
- 결과: 실패! 특권 모드에서도 동일한 오류가 발생했습니다. 이 시점에서 단순한 권한 문제가 아님을 직감했습니다.
3. 더 깊은 원인 탐색: 커널의 벽
표준적인 Docker 해결 방법들이 모두 통하지 않자, 웹 검색을 더 깊이 진행했습니다. 그리고 결정적인 단서를 찾았습니다.
- 구형 커널과 최신 이미지의 충돌: AH00141 오류, 특히 (38)Function not implemented 코드는 리눅스 커널 버전 문제와 깊은 관련이 있었습니다. 최신 Docker 이미지(특히 Debian Bullseye 기반) 내부의 Apache 웹 서버는 특정 시스템 호출(예: getrandom())을 필요로 하는데, DS716+와 같은 구형 NAS 모델의 커널(DSM 7.1 이라도 커널은 3.x 버전대) 에서는 이 기능이 제대로 구현되어 있지 않거나 지원되지 않는 경우가 많다는 것입니다.
- 표준 해결책의 한계: 이 문제는 파일 접근 권한 문제가 아니라 커널 기능 자체의 부재에 가깝기 때문에, /dev/random 마운트나 --privileged 옵션으로도 해결되지 않는 것이 일반적이었습니다.
4. 또 다른 난관: 구버전 이미지 다운로드 실패
커널 호환성 문제를 우회하기 위해, 커뮤니티에서 호환 가능성이 높다고 언급된 구버전 이미지 phpmyadmin:4.9 를 시도했습니다. 하지만 이번에는 다른 오류가 발생했습니다.
Error response from daemon: manifest for phomvadmin:4.9.11 not found: manifest unknown: manifest unknown
4.9 라는 태그는 없고, 4.9.x 형태의 세부 버전만 존재한다는 것을 뒤늦게 알았습니다. 그래서 가장 최신 4.9 버전대인 phpmyadmin:4.9.11로 다시 시도했습니다. 하지만 결과는 동일했습니다. manifest not found.
네트워크 테스트 결과, 인터넷 연결(ping 8.8.8.8) 및 기본적인 Docker 이미지 다운로드(docker pull hello-world)는 정상적으로 작동했지만, 유독 phpmyadmin:4.9.11 이미지만 정보를 찾지 못하는 이상한 상황이었습니다. (ping hub.docker.com 실패는 있었지만, hello-world는 받아지는 것으로 보아 이것이 직접적인 원인은 아닌 듯했습니다.)
5. 결론 및 최종 권장 사항
기나긴 삽질 끝에 내린 결론은 다음과 같습니다.
- 구형 시놀로지 NAS(DS716+ 등 커널 3.x 모델)에서는 최신 Docker 이미지를 실행하는 데 커널 호환성 제약이 따를 수 있다. 특히 Apache 기반 이미지에서 AH00141 / (38)Function not implemented 오류가 발생하면 이 문제를 의심해야 합니다.
- 이 커널 호환성 문제는 표준 Docker 해결책(볼륨 마운트, 특권 모드)으로는 해결되지 않을 가능성이 높습니다.
- 호환되는 구버전 이미지를 찾는 것이 대안이 될 수 있지만, 이미지 다운로드 자체에 예기치 않은 문제(manifest not found 등)가 발생할 수도 있습니다.
따라서 저와 비슷한 상황에 처한 분들께는 다음과 같은 방법을 가장 현실적인 해결책으로 권장합니다.
시놀로지 패키지 센터에서 제공하는 공식 phpMyAdmin 패키지를 설치하여 사용하세요!
Docker 환경 구축이라는 처음 목표는 달성하지 못했지만, 패키지 센터 버전을 사용하면 커널 호환성 문제나 이미지 다운로드 문제없이 안정적으로 phpMyAdmin을 사용할 수 있습니다. 저 역시 이 방법을 선택하고, 나중에 필요할 때 데이터베이스는 mysqldump 등을 이용해 수동으로 마이그레이션 하기로 결정했습니다.
마치며
Docker는 분명 강력하고 편리한 도구이지만, 때로는 호스트 환경과의 호환성 문제로 예상치 못한 난관에 부딪힐 수 있음을 이번 경험을 통해 절실히 깨달았습니다. 혹시 저와 같은 오류로 고생하고 계신다면, 너무 Docker만 고집하기보다는 시놀로지 패키지 센터라는 훌륭한 대안을 적극 활용해 보시길 추천해 드립니다.
긴 글 읽어주셔서 감사합니다!
PS
NAS DSM을 6 버전대로 낮춰서 적용하셨다는 분들이 계시긴 합니다.
후에 초기화도 좀 고려하고 있어서 이 부분 진행 되면 다시 포스팅 올리도록 하겠습니다.
'Life > NAS' 카테고리의 다른 글
Synology NAS Let's Encrypt 발급 오류? 외부 접속 불가 주범, '이 설정' 확인하세요! (80번 포트 문제 해결기) (0) | 2025.04.30 |
---|---|
[ NAS ] Synology NAS filebrowser docker setting & install (0) | 2021.11.03 |
[NAS] Synology NAS Docker Ubuntu 에서 apt-get update 가 안될때 - IP 포트 설정 (0) | 2021.11.03 |
[NAS] Synology NAS Docker Ubuntu 에서 apt-get update 가 안될때 (6) | 2021.01.09 |
[ NAS ] Synology NAS 방화벽 규칙 편집 설정으로 외국 IP 차단하기 (0) | 2020.12.17 |