使用nginx怎么在docker容器中自动生成配置文件
发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,使用nginx怎么在docker容器中自动生成配置文件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现思路最后运行的命令大概是这样:d
千家信息网最后更新 2025年01月25日使用nginx怎么在docker容器中自动生成配置文件
使用nginx怎么在docker容器中自动生成配置文件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
实现思路
最后运行的命令大概是这样:
docker run -d -p 80:80 -e xxx=xx 镜像名称 镜像中脚本路径
这里的脚本会代替dockerfile中的CMD指令,所以我们要构建一个自动生成且启动nginx的shell脚本。
#!/bin/bash#从环境变量里面获取lt开头,为了与其他环境变量区别开,例如lt_analysis=172.17.0.1:8083result=""for a in $(env | grep ^lt)do OLD_IFS="$IFS" IFS="_" arr=($a) b=${arr[1]} IFS="=" arr=($b) IFS="$OLD_IFS" result="${result} location /${arr[0]}/ { proxy_pass http://${arr[1]}/${arr[0]}/; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; }"done#将nginx配置文件中nginx_conf中置换成变量resultsed -i "s|nginx_conf|$(echo ${result})|g" /etc/nginx/nginx.confcd /usr/sbin./nginx
需要说明的一点是业务中并不需要将整个配置文件生成,只需要将其中location生成然后替换原配置文件中标记的位置,下面就是原配置文件标记的位置。
http { ... server { ... location / { root html; index index.html index.htm; } nginx_conf #error_page 404 /404.html; ...
我以为将这个shell脚本和默认的配置文件放入nginx的dockerfile镜像中,然后就成功了,但是...运行上述命令之后容器没有起来,查看容器日志,出来的信息却是***Syntax error: "(" unexpected***。我的shell脚本在centos上经过测试是可以运行的,那么为什么会报这个错呢? 经过排查,原来是dockerfile使用基础镜像是官方nginx,官方的镜像使用Ubuntu不再使用bash来而是dash执行shell脚本,真是个坑 。没办法我只好修改dockerfile,下面就是使用基础镜像centos。
FROM centosENV NGINX_VERSION 1.10.3ENV OPENSSL_VERSION 1.0.2kENV PCRE_VERSION 8.40ENV ZLIB_VERSION 1.2.11ENV BUILD_ROOT /usr/local/xx/nginx# 为了减小最终生成的镜像占用的空间,这里没有执行yum update命令,可能不是好的实践# 为了加快构建速度,这里使用了163的安装源#RUN yum -y update \RUN yum -y install curl \ && mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup \ && curl http://mirrors.163.com/.help/CentOS7-Base-163.repo -o /etc/yum.repos.d/CentOS7-Base-163.repo \ && yum -y install gcc gcc-c++ make perl zip unzip \ && mkdir -p $BUILD_ROOT \ && cd $BUILD_ROOT \ && curl https://ftp.pcre.org/pub/pcre/pcre-$PCRE_VERSION.zip -o $BUILD_ROOT/pcre-$PCRE_VERSION.zip \ && curl https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz -o $BUILD_ROOT/openssl-$OPENSSL_VERSION.tar.gz \ && curl http://www.zlib.net/zlib-$ZLIB_VERSION.tar.gz -o $BUILD_ROOT/zlib-$ZLIB_VERSION.tar.gz \ && curl https://nginx.org/download/nginx-$NGINX_VERSION.tar.gz -o $BUILD_ROOT/nginx-$NGINX_VERSION.tar.gz \ && tar vxzf nginx-$NGINX_VERSION.tar.gz \ && unzip pcre-$PCRE_VERSION.zip \ && tar vxfz zlib-$ZLIB_VERSION.tar.gz \ && tar vxfz openssl-$OPENSSL_VERSION.tar.gz \ && cd nginx-$NGINX_VERSION \ && BUILD_CONFIG="\ --prefix=/etc/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --http-client-body-temp-path=/var/cache/nginx/client_temp \ --http-proxy-temp-path=/var/cache/nginx/proxy_temp \ --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \ --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \ --http-scgi-temp-path=/var/cache/nginx/scgi_temp \ --with-openssl=$BUILD_ROOT/openssl-$OPENSSL_VERSION \ --with-pcre=$BUILD_ROOT/pcre-$PCRE_VERSION \ --with-zlib=$BUILD_ROOT/zlib-$ZLIB_VERSION \ --with-http_ssl_module \ --with-http_v2_module \ --with-threads \ " \ && mkdir -p /var/cache/nginx \ && ./configure $BUILD_CONFIG \ && make && make install \ && rm -rf $BUILD_ROOT \ && yum -y remove gcc gcc-c++ make perl zip unzip \ && yum clean all#替换nginx默认文件COPY nginx.conf /etc/nginx/#添加自动生成配置文件的shell脚本COPY 脚本名称 /root/#暴露端口EXPOSE 80 443CMD ["nginx", "-g", "daemon off;"]
提醒:docker容器不支持后台运行,当命令执行之后,容器也会自然退出,这里我们需要将nginx配置文件设置一下
#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;daemon off; //这里添加,关闭后台运行events { worker_connections 1024;}http {
看完上述内容,你们掌握使用nginx怎么在docker容器中自动生成配置文件的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
文件
脚本
生成
配置
容器
镜像
运行
自动生成
命令
变量
位置
内容
原配
名称
后台
基础
官方
就是
方法
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发商程序
数据库同步数据
方舟进化生存服务器名称
java操作数据库的语言
北京陆机科技微客谷互联网
华为复制应用数据库
网络技术名片设计
铜仁服务器机柜公司
vr软件开发学校哪家好
乌海租房软件开发
网络技术好还是大数据技术好
培训软件开发机构
魔兽登陆服务器错误
数据库三级模式二级映射的作用
数据库有哪三种数据库模型
服务器的价格
龙源数据库论文怎么查
连云港网络安全工程师
管家婆的服务器
歙县手机软件开发
中文技术支持要求会数据库
网络安全管理员试题
网络技术工程师证书软考
高校网络安全网络文明
数据库和数据项的联系
软件开发明年计划
中小学网络安全教室
怎么找软件开发项目商机
韩荣峰网络安全员
春节前网络安全巡检新闻