【发布时间】:2022-02-17 14:22:05
【问题描述】:
我有一个代理容器,它有一个入口点脚本,用于在启动时创建一个自签名证书,如果没有找到 - 如果没有,pod 在 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 "$@"
【问题讨论】:
-
也许不相关,但容器现在将自己标记为 proxy_1ner 而不是通常的 proxy_1 ...
-
你能把(签名的)证书和私钥放在 Kubernetes Secret 中,然后挂载到你的部署规范中吗?然后证书文件将始终存在。如果您在 Windows 系统上进行开发,您还可以仔细检查您的入口点脚本是否具有 Unix 行结尾,因为我认为这可能会导致错误。
标签: docker nginx kubernetes