Самоподписанный сертификат SSL с nginx
Есть a docker-compose, который поднимает приложение, БД и nginx, вот собственно сам файл:
services:
app:
...
mongodb:
...
nginx:
image: localImageForNginx // используется образ, собранный по dockerfile'у в конце поста
container_name: nginx
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
links:
- app
При добавлении самоподписанного сертификата SSL в конфиг nginx происходит ошибка, вот конфиг nginx:
#HTTP
...
#HTTPS
server {
listen 443 ssl;
server_name localhost;
ssl_certificate fvikk.crt;
ssl_certificate_key fvikk.key;
location / {
proxy_pass http://app:8080;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static {
access_log off;
expires 30d;
alias /app/static;
}
}
А вот ошибка в логах контейнера с nginx'ом:
[emerg] 1#1: cannot load certificate "/etc/nginx/fvikk.crt": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/fvikk.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: [emerg] cannot load certificate "/etc/nginx/fvikk.crt": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/fvikk.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
Проверяю по адресу и вижу, что файлы на месте:
# ls /etc/nginx
fvikk.crt fvikk.key
Файлы сертификата и все директории по пути имеют разрешение 777, не могу понять в чем проблема, что я делаю не так?
Отредактировано: Dockerfile из которого собирался nginx
FROM nginx:latest
COPY ./fvikk.crt /etc/nginx/fvikk.crt
COPY ./fvikk.key /etc/nginx/fvikk.key
Ответы (1 шт):
docker-compose может получить образ либо через директиву image - и тогда он скачает образ из удалённого репозитория, либо через директиву build в которой нужно указать контекст и путь к докерфайлу. у вас прописана директива image, так что вопреки вашим ожиданиям в вашем примере докерфайл никак не участвует в сборке контейнера.
Предлагаю переписать docker-compose.yml приблизительно следующим образом:
services:
app:
...
mongodb:
...
nginx:
build:
context: . # ищи в той же папке где лежит docker-compose.yml
dockerfile: Dockerfile # можно не писать т.к. Dockerfile это значение по умолчанию. Но может пригодиться если название докерфайла нестандартное.
container_name: nginx
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
links:
- app
Либо качать образ с удаленного репозитория и пробросить файлы сертификатов в контейнер:
services:
app:
...
mongodb:
...
nginx:
image: nginx:latest
container_name: nginx
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./fvikk.crt /etc/nginx/fvikk.crt
- ./fvikk.key /etc/nginx/fvikk.key
links:
- app