为什么我收到来自Nginx的只读文件系统错误?

w8rqjzmb  于 2022-10-06  发布在  Nginx
关注(0)|答案(1)|浏览(189)

尊敬的K8社区团队:

当我部署我的应用程序Pod时,我从nginx收到了这个错误消息。我的应用程序是一个angular6应用程序,它托管在一个nginx服务器中,该服务器被部署为EKS中的一个停靠容器。

我将我的应用程序配置为“只读容器文件系统”,但我使用的是“emptyDir”类型的“临时装载”卷和一个只读文件系统。

因此,我不确定出现以下错误的原因:
2019/04/02 14:11:29[Emerg]1#1:mkdir()“/var/cache/nginx/client_temp”失败(30:只读文件系统)nginx:[Emerg]mkdir()“/var/cache/nginx/client_temp”失败(30:只读文件系统)

我的deployment.yaml是:

...
 spec:
      volumes:
        - name: tmp-volume
          emptyDir: {}
        # Pod Security Context
      securityContext:
        fsGroup: 2000
      containers:
      - name: {{ .Chart.Name }}
        volumeMounts:
        - mountPath: /tmp
          name: tmp-volume
        image: "{{ .Values.image.name }}"
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        securityContext:
          capabilities:
            add:
            - NET_BIND_SERVICE
            drop:
            - ALL
        securityContext:
          readOnlyRootFilesystem: true
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
...

Nginx.conf为:

...
http {

include           /etc/nginx/mime.types;
  default_type      application/octet-stream;

  # Turn off the bloody buffering to temp files
  proxy_buffering off;

  sendfile          off;
  keepalive_timeout 120;

  server_names_hash_bucket_size 128;

  # These two should be the same or nginx will start writing 
  #  large request bodies to temp files
  client_body_buffer_size 10m;
  client_max_body_size    10m;
...
mnemlml8

mnemlml81#

您的nginx似乎未以根用户身份运行。

1.12.1-r2版本开始,nginx后台进程以用户1001身份运行。
1.12.1-r2

Nginx容器已迁移到非根容器方法。以前,容器以根用户身份运行,nginx守护进程以nginx用户身份启动。从现在开始,容器和nginx守护进程都以用户1001的身份运行。因此,运行nginx进程的用户可以写入配置文件。

这就是您无法在端口80上绑定的原因,必须使用端口>1000。

您应该使用:

ports:
   - '80:8080'
   - '443:8443'

并编辑nginx.conf,使其在端口8080上侦听:

server {
        listen 0.0.0.0:8080;
        ...

或者以根用户身份运行nginx:command: [ "/bin/bash", "-c", "sudo nginx -g 'daemon off;'" ]

相关问题