Implementierungsidee
Der letzte auszuführende Befehl sieht wahrscheinlich so aus:
docker run -d -p 80:80 -e xxx=xx 镜像名称 镜像中脚本路径
Das Skript hier ersetzt den cmd-Befehl in der Docker-Datei, daher müssen wir ein Shell-Skript erstellen, das Nginx automatisch generiert und startet.
#!/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
Eine Sache, die erklärt werden muss, ist, dass nicht die gesamte Konfigurationsdatei im Unternehmen generiert werden muss. Sie müssen nur den Standort generieren und den in der ursprünglichen Konfigurationsdatei markierten Standort ersetzen in der ursprünglichen Konfigurationsdatei.
http { ... server { ... location / { root html; index index.html index.htm; } nginx_conf #error_page 404 /404.html; ...
Ich dachte, ich hätte dieses Shell-Skript und die Standardkonfigurationsdatei in das Nginx-Dockerfile-Image eingefügt, und dann war es erfolgreich, aber ... Nachdem ich den obigen Befehl ausgeführt hatte, wurde der Container nicht gestartet. Als ich das Containerprotokoll überprüfte, Die herausgekommenen Informationen waren** *Syntaxfehler: „(“ unerwartet***. Mein Shell-Skript wurde auf Centos getestet und kann ausgeführt werden, warum wird dieser Fehler also gemeldet? Nach der Untersuchung stellt sich heraus, dass das Basis-Image Die von der Docker-Datei verwendete offizielle Nginx-Datei verwendet nicht mehr Bash, sondern Dash, um Shell-Skripte auszuführen. Ich habe keine andere Wahl, als die Docker-Datei zu ändern. Hier ist die grundlegende Image-Erinnerung : Docker-Container unterstützen die Ausführung im Hintergrund nicht. Der Container wird auch auf natürliche Weise beendet. Hier müssen wir die Nginx-Konfigurationsdatei festlegen
Das obige ist der detaillierte Inhalt vonWie Nginx automatisch Konfigurationsdateien in Docker-Containern generiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!