在Docker环境中自动生成Nginx配置文件有几种常用方法,以下是几种有效的解决方案:
FROM nginx:alpine
COPY nginx.conf.template /etc/nginx/nginx.conf.template
COPY docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
docker-entrypoint.sh
:
#!/bin/sh
envsubst < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf
exec nginx -g 'daemon off;'
nginx.conf.template
模板中可以包含环境变量:
server {
listen ${NGINX_PORT};
server_name ${NGINX_HOST};
...
}
FROM nginx:alpine
RUN apk add --no-cache gomplate
COPY nginx.conf.tmpl /etc/nginx/templates/
COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
docker-entrypoint.sh
:
#!/bin/sh
gomplate -f /etc/nginx/templates/nginx.conf.tmpl -o /etc/nginx/nginx.conf
exec nginx -g 'daemon off;'
FROM nginx:alpine
RUN wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64 -O /usr/local/bin/confd && \
chmod +x /usr/local/bin/confd
COPY confd /etc/confd
COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
docker-entrypoint.sh
:
#!/bin/sh
confd -onetime -backend env
exec nginx -g 'daemon off;'
Nginx官方镜像已经内置了模板处理功能:
FROM nginx:alpine
COPY nginx.conf /etc/nginx/templates/default.conf.template
任何以.template
结尾的文件都会被自动处理,环境变量会被替换。
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
data:
nginx.conf: |
server {
listen ${NGINX_PORT};
server_name ${NGINX_HOST};
...
}
然后在Deployment中挂载这个ConfigMap。
nginx -t
选择哪种方法取决于您的具体需求和部署环境的复杂性。