Мне кажется, я решил это ...
Dockerfile
FROM postgres:9.6
ARG GNAME='groupname'
ARG GID='groupid'
ARG USERID=999
# fix permissions so it can persist data on the host nfs file system
RUN groupadd -g $GID $GNAME \
&& usermod -g $GNAME postgres \
&& usermod -u $USERID postgres
# go get the entrypoint script from their git hub link and details to follow
COPY ./docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["postgres"]
Получить скрипт входа Postgres здесь
Внесите в него изменения, комментируя строки 34, 35, 36 52, 53, 54. В основном, там, где он пытается chmod
и chown
папки NFS.
...
if [ "$1" = 'postgres' ] && [ "$(id -u)" = '0' ]; then
#mkdir -p "$PGDATA"
#chown -R postgres "$PGDATA"
#chmod 700 "$PGDATA"
...
if [ "$1" = 'postgres' ]; then
#mkdir -p "$PGDATA"
#chown -R "$(id -u)" "$PGDATA" 2>/dev/null || :
#chmod 700 "$PGDATA" 2>/dev/null || :
...
Теперь создайте образ ...
docker build -t postgres9.6:nfs --build-arg GID=<NFS GROUP ID> ==build-arg GNAME=<NFS GROUP NAME> --build-arg USERID=<NFS USER ID> .
Что я имею в виду под NFS GROUP ID, USER ID и GROUP NAME - это пользователь / группа, которая имеет доступ для чтения / записив папки NFS.
Теперь у вас должен быть образ Postgres Docker, который может использовать тома хоста NFS для хранения данных базы данных.
Надеюсь, это поможет ..