Ошибка разрешения Docker-создание PostgreSQL

#postgresql #docker #docker-compose #wsl-2

Вопрос:

У меня проблема с docker-compose PostgreSQL, я работаю на рабочем столе Windows WSL 2 Docker. Когда я запускаю docker-compose на сервере linux, он работает хорошо, но когда я пытаюсь запустить его локально, я получаю следующую ошибку:

 postgres      | chmod: changing permissions of '/var/lib/postgresql/data': Operation not permitted
ngnix         | 10-listen-on-ipv6-by-default.sh: info: /etc/nginx/conf.d/default.conf is not a file or does not exist
postgres      | The files belonging to this database system will be owned by user "postgres".
postgres      | This user must also own the server process.
postgres      |
postgres      | The database cluster will be initialized with locale "en_US.utf8".
postgres      | The default database encoding has accordingly been set to "UTF8".
postgres      | The default text search configuration will be set to "english".
postgres      |
postgres      | Data page checksums are disabled.
postgres      |
ngnix         | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
ngnix         | /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
postgres      | fixing permissions on existing directory /var/lib/postgresql/data ... initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted
ngnix         | /docker-entrypoint.sh: Configuration complete; ready for start up
postgres exited with code 1
 

Я пытался изменить разрешение на весь проект, как это => chmod 777 -R project_folder

Dcoker-составьте.yml:

 postgresdb:
    container_name: postgres
    build:
      context: ./docker/postgres
      dockerfile: Dockerfile
    environment:
      - POSTGRES_PASSWORD=password123
    volumes:
    - ./docker/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql
    - ./postgres-data:/var/lib/postgresql/data

    ports:
    - "5432:5432"
 

Никаких идей, как это решить. Помогите мне, пожалуйста!

Комментарии:

1. Есть ли какая-либо причина, по которой вы не используете тома Docker для каталога данных вместо относительного пути?

2. У меня нет причин, я новичок в системах докеров 🙂

3. Вы работаете в WSL (который является Linux). Попробуйте открыть каталог ./postgres_data с помощью команды: chmod 777 ./postgres_data. И перезапустите файл создания.

Ответ №1:

Поэтому я предполагаю, что, поскольку вы монтируете каталог относительно файла docker-compose в качестве каталога «данные» в WSL, возникает ошибка разрешения. Вы можете попытаться исправить эти разрешения (chmod, chown и т. Д. В локальном каталоге).

Вы также можете использовать «именованные» тома, что также должно устранить проблему с разрешениями.

 # docker-compose.yml

services:
  # ...
  db:
    image: postgres:latest
    volumes:
      - "dbdata:/var/lib/postgresql/data"

volumes:
  dbdata: