千家信息网

docker中如何通过nginx+confd动态生成配置

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下docker中如何通过nginx+confd动态生成配置,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!当我们项目越来越多时手动去服务器修改nginx配置是一件很麻烦
千家信息网最后更新 2026年11月02日docker中如何通过nginx+confd动态生成配置

小编给大家分享一下docker中如何通过nginx+confd动态生成配置,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

当我们项目越来越多时手动去服务器修改nginx配置是一件很麻烦而且可能出错的事情。我们可以通过nginx+confd+配置中心实现一套方案避免出错并减少繁琐的流程。

首先直接上nginx+confd的dockerfile

FROM nginx:1.21.6# 拷贝confd二进制可执行文件 https://github.com/kelseyhightower/confd/releases/tag/v0.16.0COPY ./confd-0.16.0-linux-amd64 /usr/local/bin/confd# 拷贝wait-for脚本 https://github.com/Eficode/wait-forCOPY ./wait-for /# 安装nc支持wait-for脚本RUN apt-get update \  && DEBIAN_FRONTEND=noninteractive apt-get install -y \    net-tools \  && apt-get clean \  && rm -rf /var/lib/apt/lists/*RUN apt-get update \  && DEBIAN_FRONTEND=noninteractive apt-get install -y \    netcat \  && apt-get clean \  && rm -rf /var/lib/apt/lists/*# 创建配置文件目录RUN mkdir -p /etc/confd/conf.d \# 给可执行权限&& chmod +x /usr/local/bin/confd \&& chmod 777 /wait-for \# 使用脚本启动多进程&& echo "#!/bin/bash" >> start.sh \&& echo "nohup /usr/local/bin/confd -config-file /etc/confd/conf/confd.toml &" >> start.sh \&& echo "nginx -g 'daemon off;'" >> start.sh \&& chmod 664 ./start.sh CMD ["bash", "start.sh"]

如果不想自己生成可以用:

https://hub.docker.com/repository/docker/lablelan/nginx-confd

这里使用docker-compose来演示如何使用nginx+confd+etcd+etcdkeeper通过图形化修改nginx配置

version: '2'networks:  app-tier:    driver: bridge    ipam:      driver: default      config:        - subnet: 172.22.0.0/16services:  Etcd:    image: 'bitnami/etcd:3.5.2'    environment:      - ALLOW_NONE_AUTHENTICATION=yes      - ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379    ports:      - 2379:2379      - 2380:2380    networks:      app-tier:        ipv4_address: 172.22.0.2  EtcdKeeper:    image: 'deltaprojects/etcdkeeper:latest'      - 8000:8080        ipv4_address: 172.22.0.3  Nginx:    image: 'lablelan/nginx-confd'    command: sh -c '/wait-for Etcd:2379 -- bash start.sh'    depends_on:       - Etcd    volumes:      - "./confd.toml:/etc/confd/conf/confd.toml"      - "./nginx.tmpl:/etc/confd/templates/nginx.tmpl"      - "./myapp-nginx.toml:/etc/confd/conf.d/myapp-nginx.toml"      - "./nginx.conf:/etc/nginx/nginx.conf"      - "./conf.d:/etc/nginx/conf.d"      - 80:80        ipv4_address: 172.22.0.4

启动后当通过etcdkeeper创建或更新/myapp/services/web/www/1会动态生成nginx配置(80端口转发8080端口)并自动生效。这里ip配置的是内网ip不使用127.0.0.1,因为服务并不跑在nginx容器上(注意www.lablelan.com我本地hosts设置成了127.0.0.1)

这里端口8080跑的服务是一个简单的demo服务(nodejs),需要的可以从gitee获取

https://gitee.com/lablelan/amis-demo

配置完etcd后我们可以看到访问http://www.lablelan.com/select已经成功返回了

可能这样并不能体现出这个方案的实用性,其实我们可以通过在业务代码通过将当前服务信息注册到etcd实现服务发现功能,这样就可以动态地生成nginx配置从而避免手动修改nginx配置减少出错。

看完了这篇文章,相信你对"docker中如何通过nginx+confd动态生成配置"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

配置 服务 生成 动态 端口 脚本 可以通过 手动 拷贝 文件 方案 篇文章 实用 成功 繁琐 业务 事情 二进制 代码 信息 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡网 美国互联网保险保险科技 科技互联网项目 睿民互联网科技 互联网金融 科技创新 狮子座互联网科技培训 互联网金融科技委员会 江苏南京365互联网科技 中国的互联网科技企业的崛起 栖莱科技互联网股份有限公司 和信科技工业互联网 移动互联网年度科技创新 中国科技创新与世界互联网大会 互联网数据科技专业 智帮互联网科技公司最近动向 互联网科技资金流入 济南小医互联网科技有限公司招聘 互联网高科技行业有哪些企业 兰石爱特工业互联网科技分公司 唐山双旺合互联网科技产业园 互联网科技论文 狮子座互联网科技培训 老年人脱离互联网科技的作文 宁夏众和广鑫互联网科技有限公司 互联网在线教育科技创业 晋城互联网科技 徐州市互联网科技有限公司 上海钢联属于互联网科技股吗 吉林省码上互联网科技电话 山东蛋芒互联网科技有限公司
0