`: Нет такого файла или directoryute ‘sh` при запуске контейнера docker

#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, перестроите образ, и он будет работать, как ожидалось.