目录
转载请注明出处
参考链接
- https://hubgw.docker.com/_/nginx
- https://devopsian.net/p/nginx-config-template-with-environment-vars/
获取镜像
docker pull nginx:1.26.0
单机部署(bridge模式)
采用外挂nginx配置方式
创建 nginx.yml 文件, 内容如下
version: "3"
services:
nginx:
container_name: nginx
image: nginx:1.26.0
restart: on-failure:3
ports:
- 10001:80
environment:
- TZ=Asia/Shanghai
volumes:
- /nginx-work/nginx.conf:/etc/nginx/nginx.conf
- /nginx-work/logs:/var/log/nginx
# network_mode: host
# 部署
docker compose -f nginx.yml up -d
# 卸载
docker compose -f nginx.yml down
单机部署(host模式)
采用外挂nginx配置方式
创建 nginx.yml 文件, 内容如下
version: "3"
services:
nginx:
container_name: nginx
image: nginx:1.26.0
restart: on-failure:3
environment:
- TZ=Asia/Shanghai
# - NGINX_HOST=foobar.com
volumes:
- /nginx-work/nginx.conf:/etc/nginx/nginx.conf
- /nginx-work/logs:/var/log/nginx
network_mode: host
# 部署
docker compose -f nginx.yml up -d
# 卸载
docker compose -f nginx.yml down
单机部署使用 templates 配置 nginx.conf
nginx 在 1.19 之后的版本可以支持使用template来进行配置, 并支持在template中使用环境变量
官方镜像支持的环境变量
- NGINX_ENVSUBST_TEMPLATE_DIR
- 包含模板文件的目录(默认值:
/etc/nginx/templates
) - 当此目录不存在时,此函数将不执行任何有关模板处理的操作。
- 包含模板文件的目录(默认值:
- NGINX_ENVSUBST_TEMPLATE_SUFFIX
- 模板文件的后缀(默认值:
.template
) - 此函数仅处理名称以此后缀结尾的文件。
- 模板文件的后缀(默认值:
- NGINX_ENVSUBST_OUTPUT_DIR
- 输出执行 envsubst 结果的目录(默认:
/etc/nginx/conf.d
) - 输出文件名是删除了后缀的模板文件名。
- 例如。 将输出文件名 。
/etc/nginx/templates/default.conf.template/etc/nginx/conf.d/default.conf
- 例如。 将输出文件名 。
- 此目录必须可由运行容器的用户写入。
- 输出执行 envsubst 结果的目录(默认:
准备template文件
默认情况下,容器会加载
/etc/nginx/templates/*.template
文件,并将设置了环境变量的结果输出到/etc/nginx/conf.d目录下(可以通过环境变量修改)。
准备好一个名为nginx.conf.template
的文件(和docker-compose 文件同级目录),并将其配置如下PORT
为后面要传入的环境变量。
server {
server_name localhost;
listen ${PORT};
}
创建 docker-compose.yml
version: "3"
services:
nginx:
container_name: nginx
image: nginx:1.26.0
restart: on-failure:3
environment:
- NGINX_ENVSUBST_OUTPUT_DIR=/etc/nginx
- TZ=Asia/Shanghai
- PORT=8088
volumes:
# 挂载template文件目录
- ./nginx.conf.template:/etc/nginx/templates/nginx.conf.template
# 容器内文件映射到本地(重新安装nginx会还原)
- ./config/nginx-inside-container.conf:/etc/nginx/nginx.conf:rw
network_mode: host
docker compose up -d
验证
在容器的
/etc/nginx/conf.d
文件夹中可以确认到输出了设置了环境变量的文件。
docker exec -it nginx cat /etc/nginx/nginx.conf