Пользователь Apache удален из изображения при сборке openshift, ошибка whoami

Я переносил проект с kube на openshift. В миникубе проект работал нормально, а в минишифте выдает ошибку

 — Crash loop back off 

Это из журналов минисмены

[WARN] $TIMEZONE not set.
[INFO] Docker date set to: Tue Apr 20 17:39:02 UTC 2021
[INFO] $PHP_FPM_ENABLE not set. PHP-FPM support disabled.
[INFO] $CUSTOM_HTTPD_CONF_DIR not set. No custom include directory added.
[INFO] Starting Server version: Apache/2.2.15 (Unix)
whoami: cannot find name for user ID 1000140000

Вот соответствующий файл deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.22.0 (HEAD)
  creationTimestamp: null
  labels:
    io.kompose.service: occtool
  name: occtool
spec:
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: occtool
  strategy: {}
  template:
    metadata:
      annotations:
        kompose.cmd: kompose convert
        kompose.version: 1.22.0 (HEAD)
      creationTimestamp: null
      labels:
        io.kompose.network/backend: "true"
        io.kompose.network/frontend: "true"
        io.kompose.service: occtool
    spec:
      containers:
        - image: private.registry.com/image:tag
          imagePullPolicy: IfNotPresent
          name: occtool
          ports:
            - containerPort: 80
            - containerPort: 443
          resources: {}
      restartPolicy: Always
status: {}

Вот докерфайл

FROM cytopia/apache-2.2:0.9
# lines that copied files were omitted for convenience
USER root

Я не нашел много актуальной информации. USER root изначально был опущен, поэтому пользователь был apache. используя minishift ssh и docker exec, я заметил, что пользовательский apache не существует в модуле, но при создании образа я не могу запустить команду для создания пользователя, потому что пользователь существует в образе. Я считаю, что это основа проблемы, но я не нашел способа создать пользователя в openshift и не знаю, почему пользователь удаляется при создании модуля.


person Brandon Kauffman    schedule 20.04.2021    source источник


Ответы (1)


OpenShift игнорирует директиву USER из Dockerfiles и вместо этого генерирует случайный UID для пользователя в контейнере. За этим стоит некоторая идея о безопасности.

Из документации по OpenShift:

Поддержка произвольных идентификаторов пользователей

По умолчанию OpenShift Container Platform запускает контейнеры с использованием произвольно назначенного идентификатора пользователя. Это обеспечивает дополнительную защиту от процессов, покидающих контейнер из-за уязвимости ядра контейнера и тем самым обеспечивающих эскалацию разрешений на хост-узле.

Чтобы образ мог работать от имени произвольного пользователя, каталоги и файлы, в которые могут быть записаны процессы в образе, должны принадлежать корневой группе и быть доступны для чтения и записи этой группе. Файлы, которые должны быть выполнены, также должны иметь групповые разрешения на выполнение.

person Jonas    schedule 20.04.2021
comment
Я пытался следовать документам, чтобы решить эту проблему. Я установил правильные разрешения для корневой группы. Я все еще сталкиваюсь с ошибкой whoami. Любые предложения о том, как решить - person Brandon Kauffman; 21.04.2021