在使用docker-compose建立nginx时,使用环境变量的方法

在使用docker-compose部署nginx时,我们将解释如何在conf文件中使用环境变量的方法。请注意,由于不同于1.19版本之前和之后的nginx版本有所不同,请注意这一点。

使用最新版本的nginx(1.19或更高)

您可以使用官方支持的方法来自1.19版本开始。
以以下docker-compose.yml为例。

version: "3"
services:
  nginx_service:
    container_name: nginx
    image: nginx:1.19-alpine
    volumes:
      - ./templates:/etc/nginx/templates
    environment:
      - PORT=8080
    ports:
      - 3000:8080

默认情况下,容器会加载/etc/nginx/templates/*.template文件,并将设置了环境变量的结果输出到/etc/nginx/conf.d目录下。

例如,我们准备好了一个名为default.conf.template的文件,并将其配置如下。

server {
  server_name         localhost;
  listen              ${PORT};
}

执行”docker-compose up –build”命令后,上述文件将被挂载到容器内的”/etc/nginx/templates”目录中。

在容器的/etc/nginx/conf.d文件夹中可以确认到输出了设置了环境变量的文件。

server {
  server_name         localhost;
  listen              8080;
}

在nginx的1.19版本之前

在1.19之前,需要使用envsubst命令自行设置环境变量。
以以下docker-compose.yml为例。与上述方法的不同之处在于在command中执行init.sh。

version: "3"
services:
  nginx_service:
    container_name: nginx_1.19_earlier
    image: nginx:1.18-alpine
    volumes:
      - ./nginx:/etc/nginx/conf.d
    environment:
      - PORT=8080
    ports:
      - 3000:8080
    command: sh /etc/nginx/conf.d/init.sh

把default.conf.template如下所示。此与上述相同。

server {
  server_name         localhost;
  listen              ${PORT};
}

把init.sh的内容设置为以下内容。使用envsubst命令将环境变量设置到default.conf.template中,并将结果输出到default.conf。别忘记编写启动nginx的命令。

#!/bin/sh

envsubst '$$PORT' < \
  /etc/nginx/conf.d/default.conf.template > \
  /etc/nginx/conf.d/default.conf

nginx -g 'daemon off;'

执行docker-compose up –build后,您可以在容器内的/etc/nginx/conf.d目录中查看设置了环境变量的文件。

server {
  server_name         localhost;
  listen              8080;
}

请参考以下存储库中使用的说明文件:https://github.com/happyfukumoto/nginx_on_dockercompose。

广告
将在 10 秒后关闭
bannerAds