Search code examples
linuxdockernginxdocker-composelets-encrypt

can't find folder /etc/nginx/certs when trying to letencrypt docker


I'm very new to Linux. But i'm trying to create a docker-compose file that starts my expressjs api and my plain html website. To that i want docker-compose to renew my letsencrypt ssl certificates. When i run this i get this errors:

nginx-proxy        | dockergen.1 | 2023/12/03 16:22:38 Template error: open /etc/nginx/certs: no such file or directory

My docker-compose.yml is located in root, maybe thats the problem?

This is my docker-compose file:

version: '3'

services:
  nginx-proxy:
    image: jwilder/nginx-proxy:alpine
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "3000:3000"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
    environment:
      - DEFAULT_HOST=default.local
    networks:
      - app-network
    restart: always

  dockergen:
    image: jwilder/docker-gen:latest
    container_name: dockergen
    command: -notify-sighup nginx-proxy -watch -wait 5s:30s /app/companion-nginx.tmpl ./etc/nginx/conf.d/default.conf
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./nginx.tmpl:/app/companion-nginx.tmpl:ro
    networks:
      - app-network
    depends_on:
      - nginx-proxy
    restart: always

  nginx-letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: nginx-letsencrypt
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    volumes_from:
      - nginx-proxy
    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=my-domain

    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

Solution

  • You have to create it as a volume using

    nginx-proxy:
      volumes:
        - <volume>:/etc/nginx/certs:ro
        - <volume2>:/usr/share/nginx/html
    nginx-letsencrypt:
      volumes:
        - <volume>:/etc/nginx/certs:ro
        - <volume2>:/usr/share/nginx/html
    

    In order to do the challenge using and to store and read the cert from