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

使用Docker部署服务时出现/etc/nginx/certs目录不存在错误求助

问题修复方案

报错open /etc/nginx/certs: no such file or directory的核心原因是nginx-proxy容器内缺少存储SSL证书的目录,同时你的docker-compose配置存在几处关键问题,和文件放在根目录无关,下面是具体修复步骤:


1. 给nginx-proxy添加必要的卷挂载

必须挂载本地目录到容器的/etc/nginx/certs,用来存储Let's Encrypt生成的证书;同时挂载vhost.d和html目录,用于自定义虚拟主机配置和默认页面。另外只需要映射80(HTTP)和443(HTTPS)端口,无需直接映射3000端口(反向代理会自动转发)。

修改后的nginx-proxy服务配置:

nginx-proxy:
  image: jwilder/nginx-proxy:alpine
  container_name: nginx-proxy
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - /var/run/docker.sock:/tmp/docker.sock:ro
    - ./certs:/etc/nginx/certs:rw
    - ./vhost.d:/etc/nginx/vhost.d:rw
    - ./html:/usr/share/nginx/html:rw
  environment:
    - DEFAULT_HOST=default.local
  networks:
    - app-network
  restart: always

提前在docker-compose.yml所在目录创建所需目录并设置权限:

mkdir -p certs vhost.d html
chmod 755 certs vhost.d html

2. 移除单独的dockergen服务

jwilder/nginx-proxy镜像已经内置了dockergen,单独运行dockergen容器会导致配置冲突,这也是引发模板错误的原因之一,直接删除整个dockergen服务块即可。

3. 修正Let's Encrypt Companion配置

确保它能正确访问证书存储卷,同时可以添加可选的测试环境参数(避免正式环境请求次数超限):

nginx-letsencrypt:
  image: jrcs/letsencrypt-nginx-proxy-companion
  container_name: nginx-letsencrypt
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock:ro
    - ./certs:/etc/nginx/certs:rw
  networks:
    - app-network
  depends_on:
    - nginx-proxy
  environment:
    - NGINX_PROXY_CONTAINER=nginx-proxy
    # - ACME_CA_URI=https://acme-staging-v02.api.letsencrypt.org/directory  # 测试环境用,正式环境注释
  restart: always

4. 修正API服务的环境变量错误

appenings-api中的LETSENCRYPT_EMAIL应该是你的邮箱地址,而非域名:

appenings-api:
  image: my-other-image-container-url
  container_name: appenings-api
  expose:
    - "3000"
  environment:
    - VIRTUAL_HOST=my-other-domain
    - LETSENCRYPT_HOST=my-other-domain
    - LETSENCRYPT_EMAIL=your-email@example.com
  networks:
    - app-network
  restart: always

完整修改后的docker-compose.yml

version: '3'

services:
  nginx-proxy:
    image: jwilder/nginx-proxy:alpine
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./certs:/etc/nginx/certs:rw
      - ./vhost.d:/etc/nginx/vhost.d:rw
      - ./html:/usr/share/nginx/html:rw
    environment:
      - DEFAULT_HOST=default.local
    networks:
      - app-network
    restart: always

  nginx-letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: nginx-letsencrypt
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./certs:/etc/nginx/certs:rw
    networks:
      - app-network
    depends_on:
      - nginx-proxy
    environment:
      - NGINX_PROXY_CONTAINER=nginx-proxy
    restart: always

  appenings-api:
    image: my-other-image-container-url
    container_name: appenings-api
    expose:
      - "3000"
    environment:
      - VIRTUAL_HOST=my-other-domain
      - LETSENCRYPT_HOST=my-other-domain
      - LETSENCRYPT_EMAIL=your-email@example.com
    networks:
      - app-network
    restart: always

  appenings-web:
    image: my-image-container-url
    container_name: appenings-web
    expose:
      - "80"
    environment:
      - VIRTUAL_HOST=my-domain
      - LETSENCRYPT_HOST=my-domain
      - LETSENCRYPT_EMAIL=my-email
    networks:
      - app-network
    restart: always

networks:
  app-network:
    driver: bridge

启动服务

执行以下命令启动所有服务:

docker-compose up -d

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:52:02