You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派Docker部署arm64v8/mongo时证书访问被拒问题求助

问题描述

在树莓派上使用arm64v8/mongo镜像运行Docker容器时,配置TLS证书后容器启动即因权限拒绝崩溃,已排除以下情况:

  • Raspbian OS不使用SELinux,无需考虑相关限制
  • 主机上证书所在目录无读取保护
  • 设置privileged: true无法解决问题

docker-compose.yml配置:

services:
  mongodb:
    image: arm64v8/mongo
    container_name: mongodb
    command: --tlsMode requireTLS --tlsCertificateKeyFile /etc/ssl/mongo/mongodb.pem --tlsCAFile /etc/ssl/mongo/ca.pem
    privileged: true
    ports:
      - "27017:27017"
    volumes:
      - /etc/ssl/mongo:/etc/ssl/mongo
      - mongodb_data:/data/db

崩溃错误日志:

{"t":{"$date":"2025-04-09T23:10:28.348+00:00"},"s":"I",  "c":"CONTROL",  "id":23285,   "ctx":"main","msg":"Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'"}
{"t":{"$date":"2025-04-09T23:10:28.349+00:00"},"s":"E",  "c":"NETWORK",  "id":23248,   "ctx":"main","msg":"Cannot read certificate file","attr":{"keyFile":"/etc/ssl/mongo/mongodb.pem","error":"error:FFFFFFFF8000000D:system library::Permission denied"}}
{"t":{"$date":"2025-04-09T23:10:28.349+00:00"},"s":"F",  "c":"CONTROL",  "id":20574,   "ctx":"main","msg":"Error during global initialization","attr":{"error":{"code":140,"codeName":"InvalidSSLConfiguration","errmsg":"Can not set up PEM key file."}}}
解决方案

问题根源是arm64v8/mongo镜像默认以mongodb用户(UID/GID通常为999)运行容器,而挂载的证书文件权限未对该用户开放。以下是两种可行解决方法:

方法1:调整主机证书文件权限

在树莓派主机上执行命令,修改证书文件及目录的权限,让mongodb用户能读取:

# 给证书目录添加其他用户读取+执行权限
chmod o+rx /etc/ssl/mongo
# 给证书文件添加其他用户读取权限
chmod o+r /etc/ssl/mongo/*.pem

或者更精准地设置UID为999的用户权限:

# 更改文件所属组为999(mongodb用户的GID)
chgrp 999 /etc/ssl/mongo/*.pem
# 给组添加读取权限
chmod g+r /etc/ssl/mongo/*.pem

方法2:在docker-compose中指定以root用户运行

修改docker-compose.yml,添加user: root配置,让容器以root用户启动,从而拥有证书文件的读取权限:

services:
  mongodb:
    image: arm64v8/mongo
    container_name: mongodb
    command: --tlsMode requireTLS --tlsCertificateKeyFile /etc/ssl/mongo/mongodb.pem --tlsCAFile /etc/ssl/mongo/ca.pem
    user: root  # 添加这一行
    ports:
      - "27017:27017"
    volumes:
      - /etc/ssl/mongo:/etc/ssl/mongo
      - mongodb_data:/data/db

注意:以root运行容器会降低安全性,建议优先使用方法1。

内容的提问来源于stack exchange,提问作者DeveloLongScript

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:53:17