DS716+ Docker phpMyAdmin AH00141 오류 — 커널 3.x 호환성 문제 원인과 대안
결론부터 말씀드리면, 해결 안 됐습니다.
Docker로는 해결이 불가능하다는 결론에 도달했고, 최종적으로 더 현실적인 방법으로 갈아탔습니다. 저와 비슷한 상황에서 시간 낭비하실 분들이 있을 것 같아서 삽질 과정을 상세하게 남깁니다.
구형 Synology NAS DS716+(DSM 7.1.1)에서 Docker phpMyAdmin을 올리려다 AH00141: Could not initialize random number generator 오류와 꽤 오랫동안 씨름했습니다. 처음에는 단순한 권한 문제인 줄 알았는데, 파고들수록 커널 레벨 문제라는 걸 알게 됐어요.
phpMyAdmin 컨테이너 무한 재시작 — 목표와 첫 번째 난관
MariaDB 컨테이너를 voca-net(기존에 만들어 둔 커스텀 Docker 네트워크)에 연결해서 데이터베이스를 구축하고, phpMyAdmin으로 웹에서 편하게 관리하려는 게 목표였습니다. 나중에 다른 환경으로 이전할 때 Docker 환경이면 mysqldump 하나로 해결되니 편하겠다 싶었거든요.
MariaDB 컨테이너는 아무 문제 없이 올라왔습니다. 근데 phpMyAdmin을 실행하자마자 바로 무너지더라고요. 시작 → 종료 → 재시작 무한 루프. 로그를 보니 이런 에러가 가득 찍혀 있었습니다.
AH00141: Could not initialize random number generator

“난수 생성기를 초기화할 수 없다”는 이 메시지가 모든 문제의 시작이었습니다.
5번의 삽질 — 추천 방법을 전부 시도했는데 전부 실패
웹 검색으로 원인을 찾아보니, 이 오류는 Docker 컨테이너가 호스트의 난수 생성 장치(/dev/random, /dev/urandom)에 접근하는 데 문제가 있을 때 발생한다고 하더라고요. 커뮤니티에서 추천하는 방법들을 순서대로 다 해봤습니다.
시도 1 — /dev/urandom 읽기 전용 마운트
가장 일반적으로 알려진 방법입니다. 호스트의 논블로킹 난수 생성기를 컨테이너 내부에 읽기 전용으로 마운트합니다.
-v /dev/urandom:/dev/random:ro
결과: 실패. 동일한 AH00141 오류 + 무한 재시작.
시도 2 — /dev/urandom 읽기/쓰기 마운트
혹시 :ro 옵션이 문제일까 싶어서 제거해봤습니다.
-v /dev/urandom:/dev/random
결과: 실패. 여전히 동일한 오류.
시도 3 — /dev/random 직접 마운트
/dev/urandom 대신 /dev/random을 직접 마운트해봤습니다. 읽기 전용, 읽기/쓰기 두 가지 다 시도했어요.
-v /dev/random:/dev/random
-v /dev/random:/dev/random:ro
결과: 실패. 변화 없음.
시도 4 — 구버전 이미지 (phpmyadmin:5.2)
latest 이미지 자체 문제일 수 있다는 생각에 약간 이전 버전인 5.2 태그로 시도해봤습니다.
docker pull phpmyadmin:5.2
결과: 실패. 동일한 오류.
더 이상 시도할 방법이 없었습니다. 표준 해결책을 전부 소진했다는 생각이 들었어요.
시도 5 — 특권 모드 (--privileged)
여기서 조금 절박해지기 시작했습니다. 보안 위험을 감수하면서까지 컨테이너에게 호스트의 거의 모든 권한을 주는 --privileged 옵션을 붙였어요.
결과: 실패. 특권 모드에서도 동일한 오류. 이 시점에서 ‘이건 단순한 권한 문제가 아니다’라는 직감이 왔습니다.
더 깊은 원인 — 커널 호환성의 벽
표준 해결책이 5가지 전부 통하지 않으니 더 깊이 파고들었습니다. 결정적인 단서를 찾았어요.
구형 커널과 최신 이미지의 충돌이 핵심이었습니다.
AH00141 오류, 특히 함께 출력되는 (38)Function not implemented 코드는 리눅스 커널 버전 문제와 깊은 관련이 있습니다. 최신 Docker 이미지(특히 Debian Bullseye 기반) 내부의 Apache 웹 서버는 getrandom()(커널에서 안전한 난수를 가져오는 함수) 같은 시스템 콜을 사용하는데, DS716+ 같은 구형 NAS 모델은 DSM 7.1.1이라도 실제 커널은 3.x 버전대라서 이 기능이 구현되어 있지 않습니다.
파일 접근 권한 문제가 아니라 커널 기능 자체의 부재에 가까운 문제이기 때문에, /dev/random 마운트나 --privileged 옵션을 아무리 붙여도 근본적으로 해결이 안 되는 겁니다. 이게 GitLab이 DS716+ 및 이하 모델에서 지원이 안 되는 이유 중 하나이기도 해요.
구버전 이미지 다운로드도 막혔다 — phpmyadmin:4.9.11 manifest not found
커널 호환성 문제를 우회하려면 커널이 낮던 시절에 빌드된 구버전 이미지를 찾는 것이 대안입니다. 커뮤니티에서 호환 가능성이 높다고 언급된 phpmyadmin:4.9를 시도해봤는데, 이번엔 다른 오류가 났습니다.
Error response from daemon: manifest for phpmyadmin: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 pull hello-world는 정상 작동하는데 유독 phpmyadmin:4.9.11만 못 받아오는 이상한 상황이었습니다. ping hub.docker.com 실패가 있긴 했지만, hello-world는 잘 받아지는 걸 보면 직접적인 원인은 아닌 듯했어요.
결론 — 커널 3.x 모델에서의 phpMyAdmin 현실적인 대안
기나긴 삽질 끝에 내린 결론입니다.
| 시도 방법 | 결과 |
|---|---|
/dev/urandom 읽기 전용 마운트 | 실패 |
/dev/urandom 읽기/쓰기 마운트 | 실패 |
/dev/random 직접 마운트 | 실패 |
phpmyadmin:5.2 구버전 이미지 | 실패 |
--privileged 특권 모드 | 실패 |
phpmyadmin:4.9, 4.9.11 다운로드 | manifest not found |
정리하면 다음과 같습니다.
- DS716+ 등 커널 3.x 모델에서는 최신 Docker 이미지 실행 시 커널 호환성 제약이 따른다. Apache 기반 이미지에서
AH00141 / (38)Function not implemented오류가 나면 커널 문제를 의심하세요. - 이 문제는 표준 Docker 해결책(볼륨 마운트, 특권 모드)으로 해결되지 않습니다.
- 호환 구버전 이미지를 찾는 방법도 있지만, 이미지 다운로드 자체에서 예기치 않은 오류가 발생할 수 있습니다.
가장 현실적인 해결책:
시놀로지 패키지 센터에서 제공하는 공식 phpMyAdmin 패키지를 설치해서 사용하세요.
Docker 환경 구축이라는 처음 목표는 달성하지 못했지만, 패키지 센터 버전은 커널 호환성 문제나 이미지 다운로드 문제 없이 안정적으로 동작합니다. 저도 이 방법을 선택했고, 나중에 필요할 때 데이터베이스는 mysqldump로 수동 마이그레이션하기로 결정했어요.
구형 NAS를 쓰면서 Docker에 욕심을 냈다가 이런 커널 레벨 벽에 부딪힐 줄은 몰랐습니다. 어떻게든 Docker로 해결해보려는 마음이 있었는데, 결국 시놀로지 패키지 센터라는 현실적인 선택지로 돌아왔습니다.
PS. DSM을 6 버전대로 낮춰서 해결하셨다는 분들이 계시기는 합니다. 초기화를 고려하고 있어서, 진행되면 다시 포스팅 올리겠습니다. 이번에 NAS 네트워크 삽질을 하면서 Let’s Encrypt 80번 포트 오류 문제도 함께 겪었는데, 구형 NAS는 하나 해결하면 또 다른 게 튀어나오는 것 같습니다.