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

Docker环境下Nginx加载SSL证书失败问题求助

问题根因定位

报错信息中的Not a directory已经明确了问题核心:你容器内的/etc/nginx/certs不是目录,是一个普通文件,所以Nginx无法在这个路径下读取对应的证书文件。

产生问题的原因在你的Nginx-Dockerfile逻辑里:执行COPY ./data/certs/example.com.crt /etc/nginx/certs命令时,镜像的/etc/nginx目录下还没有创建certs子目录,根据Docker的COPY规则,若目标路径不存在、源为单个文件时,会直接把源文件内容写入目标路径,生成普通文件。所以第一个COPY命令执行完后,/etc/nginx/certs已经是存储了crt内容的文件,后续拷贝key文件也只会覆盖这个文件,不会生成目录结构。


修复方案

调整Nginx-Dockerfile的执行顺序,先创建证书目录再拷贝文件即可,修改后的参考配置如下:

FROM nginxinc/nginx-unprivileged:1-alpine
LABEL maintainer="hackacademy.in"

COPY ./default.conf.tpl /etc/nginx/default.conf.tpl
COPY ./uwsgi_params /etc/nginx/uwsgi_params
# 提前切换到root权限创建证书目录
USER root
RUN mkdir -p /etc/nginx/certs
# 拷贝证书时目标路径末尾加/,明确指定是目录,避免歧义
COPY ./data/certs/example.com.crt /etc/nginx/certs/
COPY ./data/certs/example.com.key /etc/nginx/certs/
COPY ./run.sh /run.sh

ENV LISTEN_PORT=8000
ENV APP_HOST=app
ENV APP_PORT=9000

RUN mkdir -p /vol/static && \
    chmod 755 /vol/static && \
    touch /etc/nginx/conf.d/default.conf && \
    chown nginx:nginx /etc/nginx/conf.d/default.conf && \
    chmod +x /run.sh && \
    # 给证书目录和文件统一加读权限,避免nginx用户无权限读取
    chmod -R +rx /etc/nginx/certs

VOLUME /vol/static

USER nginx

CMD ["/run.sh"]

额外检查建议
  • 你的default.conf里静态文件配置是alias /vol/web/,但Dockerfile里创建的静态目录是/vol/static,注意两边路径要统一,否则会出现静态文件404问题。
  • 若修改后还出现权限报错,可以检查宿主机上的证书文件本身是否有可读权限。

修改完成后重新构建镜像启动服务即可解决SSL证书加载问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:45:04