Docker для Mac и разрешения mkdir
Использование докера для 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 ответ
Ваши переменные среды для db
сервисное состояние, что PGDATA находится в /var/lib/postgresql/data/pgdata
но вы монтируете том pgdata в контейнер в /usr/local/var/postgres_data
,
Я предполагаю, что когда запускается postgres, он смотрит на env vars и ожидает появления dir в /var/lib/postgresql/data/pgdata
, Поскольку он, вероятно, не существует, он пытается создать его как пользователь postgres, который не имеет права это делать.
Используйте один и тот же путь для обеих переменных, и я уверен, что это исправит ошибку.