【Docker】使用环境变量于Nginx配置文件的方法
使用环境变量的方法
您可以在Nginx的官方镜像中使用环境变量来配置Nginx的设置文件。
使用方法如下所示:
创建设置文件的模板
创建一个Nginx配置文件模板在主机上。
在想要使用环境变量的地方,像${ENVIROMENT}这样进行记述。
upstream app {
server unix:///${PROJECT_NAME}/tmp/sockets/puma.sock;
}
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_set_header X-Real-IP ;
proxy_set_header X-Forwarded-For ;
proxy_set_header Host ;
proxy_pass http://app;
}
}
将模板进行绑定挂载。
将创建的模板绑定挂载到容器内的 /etc/nginx/templates 目录中。
services:
web:
build:
context: ./.docker/web
args:
- NGINX_IMAGE_TAG=1.23.1
volumes:
- puma-socket:/myapp/tmp/sockets
# テンプレートをバインドマウント
- ./nginx/templates:/etc/nginx/templates
ports:
- ${WEB_PORT}:80
depends_on:
- api
volumes:
puma-socket:
设置容器内的环境变量
设置使环境变量在容器内可用。
services:
web:
build:
context: ./nginx
args:
- NGINX_IMAGE_TAG=1.23.1
volumes:
- puma-socket:/myapp/tmp/sockets
# テンプレートをバインドマウント
- ./nginx/templates:/etc/nginx/templates
# environment 追記
environment:
- PROJECT_NAME=myapp
ports:
- 80:80
volumes:
puma-socket:
创建图像
运行docker compose build以创建镜像。
docker compose build
确认
执行以下命令以确认是否成功完成。
$ docker compose run web cat /etc/nginx/conf.d/sample.conf
upstream app {
server unix:///myapp/tmp/sockets/puma.sock;
}
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_set_header X-Real-IP ;
proxy_set_header X-Forwarded-For ;
proxy_set_header Host ;
proxy_pass http://app;
}
}
${PROJECT_NAME}已经变成了myapp。
可以使用环境变量,通过将/etc/nginx/templates/sample.conf.template读取并使用envsubst执行的结果输出到/etc/nginx/conf.d/sample.conf。
动作的改变 de
您可以使用环境变量来更改上述操作。
请参考以下页面了解更多详细信息。
请注意
要使用上述的功能, 容器启动时的命令必须是nginx或nginx-debug。
如果将Dockerfile中的CMD设置如下,在/docker-entrypoint.sh的条件分支中将会导致为false,从而无法使用上述功能。
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
在上述情况下,需要采取以下措施。
CMD ["nginx", "-g", "daemon off;"]