


Bagaimana nginx menjana fail konfigurasi secara automatik dalam bekas docker
Idea pelaksanaan
Larian arahan terakhir mungkin seperti ini:
docker run -d -p 80:80 -e xxx=xx 镜像名称 镜像中脚本路径
Skrip di sini akan menggantikan arahan cmd dalam fail docker, jadi kami perlu membina Skrip shell yang secara automatik menjana dan memulakan nginx.
#!/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
Satu perkara yang perlu dijelaskan ialah keseluruhan fail konfigurasi tidak perlu dijana dalam perniagaan Anda hanya perlu menjana lokasi dan menggantikan lokasi yang ditandakan dalam fail konfigurasi asal ialah lokasi yang ditandakan dalam fail konfigurasi asal.
http { ... server { ... location / { root html; index index.html index.htm; } nginx_conf #error_page 404 /404.html; ...
Saya fikir saya meletakkan skrip shell ini dan fail konfigurasi lalai ke dalam imej fail docker nginx, dan kemudian ia berjaya, tetapi... Selepas menjalankan arahan di atas, bekas itu tidak dimulakan log dan lihat maklumat. Tetapi ia adalah ***ralat sintaks: "(" tidak dijangka***. Skrip shell saya telah diuji pada centos dan boleh dijalankan, jadi mengapa ralat ini dilaporkan? Selepas penyiasatan, ternyata bahawa dockerfile menggunakan imej asas sebagai nginx rasmi, imej rasmi menggunakan ubuntu dan bukannya bash untuk melaksanakan skrip shell, yang benar-benar perangkap Saya tidak mempunyai pilihan selain mengubah suai dockerfile .
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;"]
Peringatan: Bekas Docker tidak menyokong latar belakang Run, apabila arahan dilaksanakan, bekas itu akan keluar secara semula jadi. Di sini kita perlu menetapkan fail konfigurasi nginx
Atas ialah kandungan terperinci Bagaimana nginx menjana fail konfigurasi secara automatik dalam bekas docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Empat cara untuk keluar dari Docker Container: Gunakan Ctrl D di terminal kontena masukkan perintah keluar di terminal kontena Gunakan Docker Stop & lt; container_name & gt; Perintah Gunakan Docker Kill & lt; container_name & gt; Perintah di terminal tuan rumah (keluar kuasa)

Cara memulakan semula bekas Docker: Dapatkan ID Container (Docker PS); Hentikan bekas (Docker Stop & lt; container_id & gt;); Mulakan bekas (Docker Start & lt; container_id & gt;); Sahkan bahawa permulaan semula berjaya (Docker PS). Kaedah lain: Docker mengarang (Docker-Compose Restart) atau Docker API (lihat Dokumentasi Docker).

Proses memulakan MySQL di Docker terdiri daripada langkah -langkah berikut: Tarik imej MySQL untuk membuat dan memulakan bekas, tetapkan kata laluan pengguna root, dan memetakan sambungan pengesahan port Buat pangkalan data dan pengguna memberikan semua kebenaran ke pangkalan data

Kaedah untuk menyalin fail ke tuan rumah luaran di Docker: Gunakan arahan CP Docker: Jalankan Docker CP [Options] & lt; Container Path & GT; & lt; PATH HOST & GT;. Menggunakan jumlah data: Buat direktori pada tuan rumah, dan gunakan parameter -V parameter untuk memasang direktori ke dalam bekas apabila membuat bekas untuk mencapai penyegerakan fail bidirectional.

Anda boleh menanyakan nama kontena Docker dengan mengikuti langkah -langkah: Senaraikan semua bekas (Docker PS). Tapis senarai kontena (menggunakan arahan grep). Mendapat nama kontena (terletak di lajur "Nama").

Langkah -langkah untuk mengemas kini imej Docker adalah seperti berikut: Tarik tag imej terkini imej baru memadam imej lama untuk tag tertentu (pilihan) mulakan semula bekas (jika diperlukan)

Kaedah Melihat Proses Docker: 1. Docker CLI Command: Docker PS; 2. Systemd CLI Command: Sistem Status SistemCTL; 3. Docker mengarang arahan CLI: Docker-Compose PS; 4 Proses Explorer (Windows); 5. /Direktori Proc (Linux).

Anda boleh beralih ke sumber cermin domestik. Langkah -langkah adalah seperti berikut: 1. Edit fail konfigurasi /etc/docker/daemon.json dan tambahkan alamat sumber cermin; 2. Selepas menyimpan dan keluar, mulakan semula perkhidmatan Docker Sudo SystemCtl Docker untuk meningkatkan kelajuan muat turun dan kestabilan imej.
