Pri pokuse spustiť docker-compose s Nginx vo vnútri a nastavení TLS pre
virtuálneho hostiteľa (subdoménu) sa objavila táto chyba:
nginx: [emerg] cannot load certificate "/etc/nginx/ssl/sub.peterbabic.com.cer":
BIO_new_file() failed (SSL: error:02001002:system library:fopen:
No such file or directory:fopen('/etc/nginx/ssl/sub.peterbabic.com.cer','r')
error:2006D080:BIO routines:BIO_new_file:no such file)
Skúšal som rôzne zmeny oprávnení a skupín v presvedčení, že docker používateľ nemá dostatočné privilégiá na prístup k súborom, keďže v súborovom systéme boli zreteľne prítomné.
Trvalo mi oveľa dlhšie vyriešiť to, ako by som chcel priznať. Po mnohých výsledkoch vyhľadávania, ktoré neposkytli žiadnu nápovedu o probléme, som našiel tento komentár, ktorý ma napokon naviedol správnym smerom.
Docker compose volumes #
Problém bol, že som inštruoval Nginx, aby pristupoval k certifikátom
vygenerovaným pomocou
acme.sh, ktoré sa nachádzali
na hostiteľovi, ale neboli namontované kontajnerom, takže k nim nemohol
pristupovať. Aká začiatočnícka chyba. Riešenie je na poslednom riadku v
tomto výňatku zo súboru docker-compose.yml:
version: "3"
services:
nginx:
container_name: nginx-server
image: nginx
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- /etc/nginx/ssl:/etc/nginx/ssl
Posledný riadok namontuje priečinok /etc/nginx/ssl/ z hostiteľa do
kontajnera, takže Nginx tam môže pristupovať k certifikátom a povoliť TLS.
Pre úplnosť, výňatok z odkazovaného súboru nginx.conf by mohol vyzerať
takto:
server {
listen 443 ssl http2;
server_name sub.peterbabic.com;
ssl_certificate /etc/nginx/ssl/sub.peterbabic.com.cer;
ssl_certificate_key /etc/nginx/ssl/sub.peterbabic.com.key;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
}
Toto je 75. príspevok #100daystooffload.