Docker для Mac и разрешения mkdir - PullRequest
1 голос
/ 29 апреля 2019

Использование докера для Mac.Просто все установил вчера.Наконец-то запустилось приложение.Но я не могу запустить миграцию, пока не установлю postgis.Поэтому я удалил официальное изображение postgres dockerhub для postgis: 11-alpine image.Но я продолжаю получать сообщение об отказе в разрешении, когда docker пытается выполнить mkdir для тома pg_data.

Dockerfile:

        version: '3'

    # Containers we are going to run
    services:
      # Our Phoenix container
      phoenix:
        # The build parameters for this container.
        build:
          # Here we define that it should build from the current directory
          context: .
        environment:
          # Variables to connect to our Postgres server
          PGUSER: postgres
          PGPASSWORD: postgres
          PGDATABASE: gametime_dev
          PGPORT: 5432
          # Hostname of our Postgres container
          PGHOST: db
        ports:
          # Mapping the port to make the Phoenix app accessible outside of the container
          - "4000:4000"
        depends_on:
          # The db container needs to be started before we start this container
          - db
          - redis

      redis:
        image: "redis:alpine"
        ports:
          - "6379:6379"
        sysctls:
          net.core.somaxconn: 1024

      db:
        # We use the predefined Postgres image
        image: mdillon/postgis:11-alpine
        environment:
          # Set user/password for Postgres
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
          # Set a path where Postgres should store the data
          PGDATA: /var/lib/postgresql/data/pgdata
        restart: always
        volumes:
          - pgdata:/usr/local/var/postgres_data
    # Define the volumes
    volumes:
      pgdata:

Ошибка, которую я получаю:

db_1       | mkdir: can't create directory '/var/lib/postgresql/data/pgdata': Permission denied

Этого не происходит при использовании изображения postgres (официальное).Я погуглил высоко и низко.Я прочитал кое-что о Docker для Mac, выполняющем команды для контейнеров, которые он создает в виртуальной машине как локальный пользователь текущего пользователя, а не как root.Но это не имеет смысла для меня - как мне обойти это, если это так?

[Дополнительное примечание:] - я пробовал: z и: Z - все еще получал ту же ошибкукак указано выше.

Оцените время заранее.

1 Ответ

2 голосов
/ 29 апреля 2019

Переменные среды для службы db указывают, что PGDATA находится в /var/lib/postgresql/data/pgdata, но вы монтируете том pgdata в контейнере на /usr/local/var/postgres_data.

Я предполагаю, что при запуске postgres онсмотрит на env vars и ожидает dir в /var/lib/postgresql/data/pgdata.Поскольку он, вероятно, не существует, он пытается создать его как пользователь postgres, который не имеет права делать это.

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

...