使用nginx怎么在docker容器中自動(dòng)生成配置文件?相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

實(shí)現(xiàn)思路
最后運(yùn)行的命令大概是這樣:
docker run -d -p 80:80 -e xxx=xx 鏡像名稱 鏡像中腳本路徑
這里的腳本會(huì)代替dockerfile中的CMD指令,所以我們要構(gòu)建一個(gè)自動(dòng)生成且啟動(dòng)nginx的shell腳本。
#!/bin/bash
#從環(huán)境變量里面獲取lt開頭,為了與其他環(huán)境變量區(qū)別開,例如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需要說明的一點(diǎn)是業(yè)務(wù)中并不需要將整個(gè)配置文件生成,只需要將其中l(wèi)ocation生成然后替換原配置文件中標(biāo)記的位置,下面就是原配置文件標(biāo)記的位置。
http {
...
server {
...
location / {
root html;
index index.html index.htm;
}
nginx_conf
#error_page 404 /404.html;
...我以為將這個(gè)shell腳本和默認(rèn)的配置文件放入nginx的dockerfile鏡像中,然后就成功了,但是...運(yùn)行上述命令之后容器沒有起來,查看容器日志,出來的信息卻是***Syntax error: “(” unexpected***。我的shell腳本在centos上經(jīng)過測試是可以運(yùn)行的,那么為什么會(huì)報(bào)這個(gè)錯(cuò)呢? 經(jīng)過排查,原來是dockerfile使用基礎(chǔ)鏡像是官方nginx,官方的鏡像使用Ubuntu不再使用bash來而是dash執(zhí)行shell腳本,真是個(gè)坑 。沒辦法我只好修改dockerfile,下面就是使用基礎(chǔ)鏡像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 # 為了減小最終生成的鏡像占用的空間,這里沒有執(zhí)行yum update命令,可能不是好的實(shí)踐 # 為了加快構(gòu)建速度,這里使用了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默認(rèn)文件 COPY nginx.conf /etc/nginx/ #添加自動(dòng)生成配置文件的shell腳本 COPY 腳本名稱 /root/ #暴露端口 EXPOSE 80 443 CMD ["nginx", "-g", "daemon off;"]
提醒:docker容器不支持后臺(tái)運(yùn)行,當(dāng)命令執(zhí)行之后,容器也會(huì)自然退出,這里我們需要將nginx配置文件設(shè)置一下
#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; //這里添加,關(guān)閉后臺(tái)運(yùn)行
events {
worker_connections 1024;
}
http {看完上述內(nèi)容,你們掌握使用nginx怎么在docker容器中自動(dòng)生成配置文件的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
當(dāng)前文章:使用nginx怎么在docker容器中自動(dòng)生成配置文件-創(chuàng)新互聯(lián)
文章URL:http://www.chinadenli.net/article24/djddje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、搜索引擎優(yōu)化、電子商務(wù)、網(wǎng)站策劃、移動(dòng)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容