【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;"]

bannerAds