nginx怎么在docker容器中自动生成配置文件
发布时间 - 2023-05-18 00:00:00 点击率:次实现思路
最后运行的命令大概是这样:
docker run -d -p 80:80 -e xxx=xx 镜像名称 镜像中脚本路径
这里的脚本会代替dockerfile中的cmd指令,所以我们要构建一个自动生成且启动nginx的shell脚本。
#!/bin/bash
#从环境变量里面获取lt开头,为了与其他环境变量区别开,例如lt_analysis=172.17.0.1:8083
result=""
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中置换成变量result
sed -i "s|nginx_conf|$(echo ${result})|g" /etc/nginx/nginx.conf
cd /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 centos
env nginx_version 1.10.3
env openssl_version 1.0.2k
env pcre_version 8.40
env zlib_version 1.2.11
env 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 443
cmd ["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 {
# docker
# nginx
# 镜像
# 配置文件
# 要将
# 会报
# 自动生成
# 是个
# 也会
# 却是
# 是这样
# 只需
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Laravel Docker环境搭建教程_Laravel Sail使用指南
高端云建站费用究竟需要多少预算?
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
大学网站设计制作软件有哪些,如何将网站制作成自己app?
iOS UIView常见属性方法小结
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Laravel如何使用Vite进行前端资源打包?(配置示例)
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
大连 网站制作,大连天途有线官网?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
,在苏州找工作,上哪个网站比较好?
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
高防服务器租用指南:配置选择与快速部署攻略
如何为不同团队 ID 动态生成多个独立按钮
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
实现点击下箭头变上箭头来回切换的两种方法【推荐】
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
如何自定义建站之星模板颜色并下载新样式?
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何快速重置建站主机并恢复默认配置?
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
如何快速搭建虚拟主机网站?新手必看指南
JavaScript如何实现类型判断_typeof和instanceof有什么区别
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
Swift中swift中的switch 语句
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
网站建设要注意的标准 促进网站用户好感度!
bing浏览器学术搜索入口_bing学术文献检索地址
北京企业网站设计制作公司,北京铁路集团官方网站?
如何快速搭建高效WAP手机网站吸引移动用户?
Laravel如何实现用户密码重置功能?(完整流程代码)
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
C语言设计一个闪闪的圣诞树
html5的keygen标签为什么废弃_替代方案说明【解答】
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
教学论文网站制作软件有哪些,写论文用什么软件
?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
详解jQuery停止动画——stop()方法的使用
Android中AutoCompleteTextView自动提示


露端口
expose 80 443
cmd ["nginx", "-g", "daemon off;"]