在kubernetes中部署前端项目(使用nginx作为服务器)的时候,遇到了一个报错,报错信息如下
1 2 2019/11/19 02:16:31 [emerg] 1#1: open() "/etc/nginx/mime.types" failed (2: No such file or directory) in /etc/nginx/nginx.conf:14 nginx: [emerg] open() "/etc/nginx/mime.types" failed (2: No such file or directory) in /etc/nginx/nginx.conf:14
提示的意思是没有找到mine.types文件,也就是说容器内/etc/nginx下不存在这个文件。但是这个文件不是nginx提供的吗?
我赶忙看了下我是如何部署这个容器的。
dockerfile:
1 2 FROM nginx:1.17.3 COPY dist /usr/share/nginx/html
deployment.yml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 apiVersion: apps/v1beta2 kind: Deployment metadata: name: smcp-web namespace: nginx-test spec: selector: matchLabels: app: smcp-web replicas: 1 template: metadata: labels: app: smcp-web spec: containers: - name: smcp-web image: docker-registry.xxx.com/fe/fe-nginx:no-nginx-conf ports: - containerPort: 80 volumeMounts: - name: nginx-conf mountPath: /etc/nginx volumes: - name: nginx-conf configMap: name: nginx-conf items: - key: nginx.conf path: nginx.conf
这样就会将在configMap中声明的nginx.conf对应内容挂载到/etc/nginx(mountPath)/nginx.conf文件中。
kubectl create configmap nginx-conf –from-file=nginx.conf=./path/to/nginx.conf -n nginx-test
一想到这里我大概知道了原因,是因为我们挂载的是整个/etc/nginx目录,但是我们这个目录里面只加了nginx.conf,而容器中/etc/nginx目录下面还有很多其他的文件, 我们直接挂载了整个目录进去,其他的文件会随着目录的挂载而消失,自然读取配置就出了问题。
现在问题已经知道了,如何解决呢?
要是可以只挂载这个文件就好了,查阅了下文档,发现subPath完全可以满足我们的需求。
subPath的目的是为了在单一Pod中多次使用同一个volume而设计的
所以将spec部分修改如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 spec: containers: - name: smcp-web image: docker-registry.xxx.com/fe/fe-nginx:no-nginx-conf ports: - containerPort: 80 volumeMounts: - name: nginx-conf mountPath: /etc/nginx/nginx.conf subPath: nginx.conf volumes: - name: nginx-conf configMap: name: nginx-conf
这样我们就做到了将nginx.conf文件挂载到/etc/nginx目录下,同时不影响原有目录中的内容。