Проблемы с разрешениями контейнера Docker PostgreSQL при монтировании NFS и пользователе доменаLinux

Ответить
Anonymous
 Проблемы с разрешениями контейнера Docker PostgreSQL при монтировании NFS и пользователе домена

Сообщение Anonymous »

Описание проблемы
У меня возникли проблемы с разрешениями при развертывании контейнера PostgreSQL 9.6 в Docker Swarm, который использует том, смонтированный по NFS, для хранения данных. Контейнер не запускается с ошибкой:

Код: Выделить всё

FATAL: data directory "/var/lib/postgresql/data/pg_data" has wrong ownership
HINT: The server must be started by the user that owns the data directory.
Сведения о среде
  • Платформа: Docker Swarm
  • Версия PostgreSQL: 9.6.24
  • Сервер NFS: re0srt10003.eresz03.com
  • NFS Монтирование: /vol/re0srt10003_vol011/NFS_customer_data_02/Production_data/nfs01/
  • Примечание:
    → только действительные пользователи AD (unix/windows) могут использоваться для доступа к общему файловому ресурсу
    → доступ локальных пользователей не разрешен (пользователи, существующие только в локальной системе Linux)
    → Имейте в виду, что новые общие папки будут находиться на новом сервере re0srt10003.eresz03.com и, как упоминалось на нашей странице документации, локальные пользователи (пример UID 1000/GID 1000) не работают. Никаких исключений!
    Для подключения к общему ресурсу используйте пользователей и группы вашего домена (UID 188044 / GID 806642981).
Текущая конфигурация
Файл Docker, использованный для создания образа

Код: Выделить всё

FROM postgres:9.6.24

ENV http_proxy=http://proxy.com:8686
ENV https_proxy=http://proxy.com:8686

RUN sed -i '/stretch-updates/d' /etc/apt/sources.list && \
sed -i 's|http://deb.debian.org/debian|http://archive.debian.org/debian|g' /etc/apt/sources.list && \
sed -i 's|http://security.debian.org/debian-security|http://archive.debian.org/debian-security|g' /etc/apt/sources.list && \
rm -f /etc/apt/sources.list.d/pgdg.list && \
echo 'Acquire::Check-Valid-Until "false";' > /etc/apt/apt.conf.d/10-no-check-valid-until && \
apt-get update && \
apt-get install -y --allow-unauthenticated postgresql-contrib && \
apt-get clean &&  \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN usermod -u 188044 postgres
RUN groupmod -g 806642981 postgres

RUN su root -c "chown -R postgres:postgres /var/lib/postgresql"

USER postgres
STOPSIGNAL SIGINT
Служба Docker Compose

Код: Выделить всё

version: '3.7'
services:
fossology-scheduler:
command: scheduler
image: fossology:$VERSION
environment:
- FOSSOLOGY_DB_HOST=fossology-db
- FOSSOLOGY_DB_NAME=fossology
- FOSSOLOGY_DB_USER=fossy
- FOSSOLOGY_INSTANCE=$INSTANCE
networks:
- fossology-net
volumes:
- fossy_repo:/srv/fossology/repository
deploy:
placement:
constraints:
- node.labels.fossology == true
secrets:
- source: fossology-db-pwd
target: fossology.pwd
uid: '188044'
gid: '806642981'
mode: 0400
hostname: fossology-scheduler.localhost

fossology-web:
command: web
image: fossology:$VERSION
environment:
- FOSSOLOGY_DB_HOST=fossology
- FOSSOLOGY_DB_NAME=fossology
- FOSSOLOGY_DB_USER=fossui
- FOSSOLOGY_SCHEDULER_HOST=fossology-scheduler
- FOSSOLOGY_INSTANCE=$INSTANCE
user: fossui
networks:
- fossology-net
- nginx-net
volumes:
- fossy_repo:/srv/fossology/repository
deploy:
placement:
constraints:
- node.labels.fossology == true
secrets:
- source: fossology-db-pwd
target: fossology.pwd
uid: '188044'
gid: '806642981'
mode: 0400

fossology-db:
image: postgres_9.6:01
environment:
- POSTGRES_DB=fossology
- POSTGRES_USER=fossui
- POSTGRES_PASSWORD=password
- POSTGRES_INITDB_ARGS='-E UTF8'
- PGDATA=/var/lib/postgresql/data
ports:
- target: 5432
published: 9999
protocol: tcp
mode: ingress
networks:
- fossology-net
volumes:
- fossy_pg_data:/var/lib/postgresql/data
deploy:
placement:
constraints:
- node.labels.fossology == true

networks:
fossology-net:
name : fossology-net-$INSTANCE
driver: overlay
external: true
nginx-net:
external: true

volumes:
fossy_repo:
driver: local
driver_opts:
type: nfs
o: "addr=re0srt10003.eresz03.com,rw,nfsvers=4"
device: ":/vol/re0srt10003_vol011/NFS_customer_data_02/Production_data/nfs01/repo"
fossy_pg_data:
driver: local
driver_opts:
type: nfs
o: "addr=re0srt10003.eresz03.com,rw,nfsvers=4"
device: ":/vol/re0srt10003_vol011/NFS_customer_data_02/Production_data/nfs01/db"
secrets:
fossology-db-pwd:
external: true
Что я пробовал
  • Изменил Dockerfile, чтобы изменить UID/GID пользователя postgres в соответствии с требованиями домена.
  • Проверил, что сопоставление пользователей внутри контейнера показывает правильные идентификаторы.
    id postgres
    uid=188044(postgres) gid=806642981(postgres) groups=806642981(postgres),101(ssl-cert)
  • Подтверждено, что монтирование NFS доступно для владельцев, как показано ниже:
    drwx--S--- 8 188044 806642981 db
  • Пытался запустить службу без тома NFS — работает как положено.
Дополнительный контекст
Ранее эта настройка работала с локальным пользователем/пользователем root, но не удалась при переходе на новую систему хранения на основе NFS, которая обеспечивает принудительное использование пользователей домена.
Любые предложения относительно возможных основных причин или альтернативных способов решения этой проблемы будут высоко оценены!.

Подробнее здесь: https://stackoverflow.com/questions/798 ... omain-user
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»