Docker下的Nginx自动化修改监听端口

1 docker-compose.yaml

原理就是通过envsubst命令将含有系统变量的脚本替换环境变量后生成新的配置文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#示例1 替换文件内的全部变量
nginx:
image: nginx:1.20.1
restart: always
environment:
- SERVER_PORT=${SERVER_PORT}
volumes:
- "./htdocs:/usr/share/nginx/html"
- "./conf/nginx/conf.d:/etc/nginx/conf.d"
- "./conf/nginx/nginx.conf:/etc/nginx/nginx.conf"
command: /bin/sh -c "envsubst < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
network_mode: "host"

#示例2 替换文件内的指定变量
#备注:采用脚本的方式替换指定变量的原因是,基于示例1直接写执行命令,总是不成功。
nginx:
image: nginx:1.20.1
restart: always
environment:
- NGINX_PORT=${SERVER_PORT}
volumes:
- "./htdocs:/usr/share/nginx/html"
- "./conf/nginx/conf.d:/etc/nginx/conf.d"
- "./conf/nginx/nginx.conf:/etc/nginx/nginx.conf"
command: ["/bin/sh", "-c", "/etc/nginx/conf.d/start.sh"]
network_mode: "host"

2 start.sh

nginx镜像内置envsubst命令,通过该命令,引用系统变量生成新的配置文件,同时可指定替换的变量,如下脚本,替换指定的变量${NGINX_PORT}

1
2
#! /bin/sh
envsubst '${NGINX_PORT}' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'
-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!