我正在嘗試Nginx用我自己的使用ConfigMap物件替換現有的 default.conf 檔案,但此操作會導致“退避重啟失敗的容器”錯誤。如果我將覆寫目錄從 conf.d 更改為新的 nginx.d,那么我的配置傳遞將成功。看起來 nginx 不允許重寫其現有檔案和目錄。是否有任何解決方法或我在部署檔案中犯了錯誤?
這是我的yaml檔案。部署檔案
apiVersion: apps/v1
kind: Deployment
metadata:
name: skadate-deployment
labels:
tier: backend
spec:
replicas: 1
selector:
matchLabels:
app: skadate
tier: backend
template:
metadata:
labels:
app: skadate
tier: backend
spec:
volumes:
- name: skadate-software
emptyDir: {}
- name: nginx-config
configMap:
name: skadate-test-nginx-config
items:
- key: default.conf
path: default.conf
containers:
- name: php
image: psiloscop/php-hello-world:latest
ports:
- containerPort: 81
name: http
protocol: TCP
volumeMounts:
- name: skadate-software
mountPath: /var/www/html
lifecycle:
postStart:
exec:
command: [ "/bin/sh", "-c", "cp -r /app/. /var/www/html" ]
- name: nginx
image: nginx:stable
ports:
- containerPort: 80
volumeMounts:
- name: skadate-software
mountPath: /var/www/html
- name: nginx-config
mountPath: /etc/nginx/conf.d/default.conf
subPath: default.conf
配置映射檔案
apiVersion: v1
kind: ConfigMap
metadata:
name: skadate-test-nginx-config
labels:
tier: backend
data:
default.conf : |
server {
listen 80;
location / {
root /var/www/html
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}
這是 Deployment pod 日志:

uj5u.com熱心網友回復:
我最近也遇到過類似的事情。為了管理這個,我們可以破解 CMD(命令)來做需要的事情。
首先為 nginx 容器創建 nginx 行程的啟動腳本。&這必須是configmap肯定的。
#!/bin/sh
rm -rf /etc/nginx/conf.d/default.conf
cp /tmp/default.conf /etc/nginx/conf.d/default.conf
nginx -g daemon off;
然后將此腳本用于部署檔案中的 nginx 容器。有時像下面這樣:
apiVersion: apps/v1
kind: Deployment
metadata:
name: skadate-deployment
labels:
tier: backend
spec:
replicas: 1
selector:
matchLabels:
app: skadate
tier: backend
template:
metadata:
labels:
app: skadate
tier: backend
spec:
volumes:
- name: skadate-software
emptyDir: {}
- name: nginx-config
configMap:
name: skadate-test-nginx-config
items:
- key: default.conf
path: default.conf
containers:
- name: php
image: psiloscop/php-hello-world:latest
ports:
- containerPort: 81
name: http
protocol: TCP
volumeMounts:
- name: skadate-software
mountPath: /var/www/html
lifecycle:
postStart:
exec:
command: [ "/bin/sh", "-c", "cp -r /app/. /var/www/html" ]
- name: nginx
image: nginx:stable
command: ['sh','/script/nginx-start']
ports:
- containerPort: 80
volumeMounts:
- name: skadate-software
mountPath: /var/www/html
- name: nginx-config
mountPath: /tmp
subPath: default.conf
- name: nginx-start-script
mountpath: /script
subPath: nginx-start
這里有兩個重要的變化是:
- 我們放置在 /tmp 路徑中的新 default.conf 檔案將由自定義啟動腳本負責復制到 /etc/nginx/conf.d/default.conf 路徑中。
- 添加了自定義腳本以用新檔案替換 default.conf 檔案,然后啟動 nginx 行程
configmap自定義啟動腳本的額外內容
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-start-script
labels:
app: nginx
data:
nginx-start : |
#!/bin/sh
rm -rf /etc/nginx/conf.d/default.conf
cp /tmp/default.conf /etc/nginx/conf.d/default.conf
nginx -g daemon off;
希望這能解決您的問題。請分享結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/534613.html
標籤:nginx库伯内特斯
下一篇:k8s容器初始化和負載均衡
