如何在Docker上的nginx.conf文件中应用环境变量

这是备忘录。

我正在寻找一种在Docker上的NGINX应用环境变量的好方法。

我用envsubst进行群嘲的方法是否很流行呢?我看了一下Docker Hub上的nginx页面,好像从版本1.19开始有了一种更好的方法?

DockerHub
https://hub.docker.com/_/nginx

DockerHub
https://hub.docker.com/_/nginx

只要在试用过程中立刻使用谷歌翻译。

全体图 tú)

├ docker-compose.yml
├ .env
├ nginx
        ├ templates
        │     └ default.conf.template //これがポイント
        └ Dockerfile

.env文件的内容

#.env
NGINX_PORT=8080

将.env文件放在与docker-compose.yml文件相同的层级中,它会被作为环境变量加载进来。

#nginx/Dockerfile

FROM nginx:1.19.1
RUN rm /etc/nginx/conf.d/default.conf
  #docker-compose.yml

  nginx:
    container_name: nginx
    build: ./nginx

    ports:
      - ${NGINX_PORT:-80}:${NGINX_PORT:-80}
    depends_on:
      - django
    volumes: 
      - ./nginx/templates:/etc/nginx/templates

    environment:
      - NGINX_PORT=${NGINX_PORT:-80}

在这一部分,它获取了在.env文件中写入的NGINX_PORT的值。如果无法获取到该值,将使用默认值80进行设置。

#default.conf.template

server {
    # 環境変数の値を取得
    listen ${NGINX_PORT};
}

默认情况下,此函数将读取/etc/nginx/templates/*.template下的模板文件,并将envsubst的执行结果输出到/etc/nginx/conf.d。

根据日语翻译结果,好像是将etc/nginx/templates文件夹中的.template文件正确解析并用环境变量替换后输出到conf.d文件夹中。不太清楚,哈哈。

完成 docker-compose build 和 docker-compose up以後,順利地連接上了。

广告
将在 10 秒后关闭
bannerAds