I am very new to Docker and containers.
I am using docker-compose
to start up my application. I keep getting this error:
2024/07/19 17:05:54 [emerg] 1#1: cannot load certificate "/etc/nginx/certs/certificate.pem": PEM_read_bio_X509_AUX() failed (SSL: error:0480006C:PEM routines::no start line:Expecting: TRUSTED CERTIFICATE)
My docker-compose.yml
looks like this for this reverse proxy server:
<container-name>:
image: <image>
build:
context: ./
dockerfile: Dockerfile.nginx
volumes:
- $SSL_CERT_PATH:/etc/nginx/certx/certificate.pem
- $SSL_KEY_PATH:/etc/nginx/certs/certificate.key
- $LOG_ROOT:<path>
ports:
-"80:80"
-"443:443"
depends_on:
- <container2>
- <container3>
- <container4>
When I echo
my $SSL_CERT_PATH
I get the path that I would expect where the cert is located on my Mac.
Here is my Dockerfile.nginx
:
FROM containers.<website.com>
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
I have tried manually changing my .pem file to start with
---BEGIN TRUSTED CERTIFICATE---
as opposed to
---BEGIN CERTIFICATE---
as this was the solution here
. But I continue to get the same error.
Here is part of my default.conf
:
server {
listen 80 default_server;
server_name_;
server_tokens off;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name_;
server_tokens off;
ssl_certificate /etc/nginx/certs/certificate.pem;
ssl_certificate_key /etc/nginx/certs/certificate.key;
If I comment out the last 6 lines, I do not get the error, so my container runs and I can exec into it. (But I need to use SSL!) When I bash into the container with docker exec -it <container> sh
I can navigate to /etc/nginx/certs
. Turns out certificate.pem
and certificate.key
are empty directories and not files. Shouldn’t Docker be mounting them as files?
Thanks for the help!