почему я получаю сообщение об ошибке файловой системы только для чтения от Nginx? - PullRequest
1 голос
/ 02 апреля 2019

Уважаемая команда сообщества K8S,

Я получаю это сообщение об ошибке от 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;
...

1 Ответ

0 голосов
/ 16 апреля 2019

Похоже, ваш nginx не запущен от имени пользователя root.

С момента выпуска 1.12.1-r2 демон nginx запускается от имени пользователя 1001.

1.12.1-r2

Контейнер nginx был перенесен в подход без корневых контейнеров.Ранее контейнер выполнялся от имени пользователя root, а демон nginx был запущен от имени пользователя nginx.Начиная с этого момента, и контейнер, и демон nginx запускаются как пользователь 1001. Как следствие, файлы конфигурации доступны для записи пользователю, выполняющему процесс nginx.

Именно поэтому вы не можете связатьна порту 80 необходимо использовать порт> 1000.

Вы должны использовать:

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

и отредактировать nginx.conf так, чтобы он прослушивал порт 8080:

server {
        listen 0.0.0.0:8080;
        ...

Или запустите nginx от имени пользователя root: command: [ "/bin/bash", "-c", "sudo nginx -g 'daemon off;'" ]

...