#docker #nginx #kubernetes
#докер #nginx #kubernetes
Вопрос:
У меня есть прокси-контейнер, в котором есть скрипт точки входа для создания самозаверяющего сертификата при запуске, если он не найден — если нет, модуль завершает работу при запуске в kubernetes, поэтому я не могу скопировать реальный сертификат в
Итак, мой вопрос двоякий;
1. Должен быть лучший способ сделать это
2- Если нет, то что, черт возьми ': No such file or directoryute 'sh
, означает — это единственное, что есть в журналах контейнеров.
Вот файл Dockerfile:
FROM nginx:1-alpine
RUN chown -R nginx:nginx /var/cache/nginx
RUN chown -R nginx:nginx /var/log/nginx
RUN chown -R nginx:nginx /etc/nginx/conf.d
RUN touch /var/run/nginx.pid
RUN chown -R nginx:nginx /var/run/nginx.pid
COPY ./entrypoint.sh /custom-entrypoint.sh
RUN chmod x /custom-entrypoint.sh
USER nginx
COPY service.conf /etc/nginx/conf.d/service.conf
COPY nginx.conf /etc/nginx/nginx.conf
COPY .keep *.include /etc/nginx/includes/
COPY 50x.html /usr/share/nginx/html/50x.html
COPY ./ssl/* /etc/nginx/cert/
ENTRYPOINT ["/custom-entrypoint.sh"]
CMD ["/docker-entrypoint.sh"]
CMD ["nginx", "-g", "daemon off;"]
И сценарий точки входа:
#!/usr/bin/env sh
set -e
if [ -f "/etc/nginx/cert/listener.key" ]; then
# Create a certificate if none exists - to prevent a crash
openssl req -x509 -nodes -days 365
-subj "/C=CA/ST=QC/O=Company, Inc./CN=example.com"
-addext "subjectAltName=DNS:example.com"
-newkey rsa:2048
-keyout /etc/nginx/cert/listener.key
-out /etc/nginx/cert/listener.crt;
fi
exec "$@"
Комментарии:
1. Возможно, это не связано, но контейнер теперь помечает себя как proxy_1ner вместо обычного proxy_1 …
2. Можете ли вы поместить (подписанный) сертификат и закрытый ключ в секретный файл Kubernetes и смонтировать его в спецификации развертывания? Тогда файл сертификата всегда будет присутствовать. Вы также можете дважды проверить, имеет ли ваш сценарий точки входа окончания строк Unix, если вы разрабатываете в системе Windows, поскольку я думаю, что это может привести к этой искаженной ошибке.
Ответ №1:
Только что возникла эта проблема. Обнаружил, что в моей точке входа run.sh
были концы строки CRLF (Windows), а не только LF (Linux). Повторно сохранен как LF, перестроите образ, и он будет работать, как ожидалось.