@sergey_fs

Не подключить Volume Pg?

Добрый день можете подсказать по докеру
Не могу подключить Volume к папке контейнера чтобы стали доступны файлы БД и можно было делать бекапы

Если запускаю без Волуме то конетйнер запускаеться и все норм
Но если с ним то оишибка

postgresql_1 | run server:
postgresql_1 | postgres: could not access directory "/var/lib/pgsql/data": No such file or directory
postgresql_1 | Run initdb or pg_basebackup to initialize a PostgreSQL data directory.
postgresql_1 | Creating user "golang"...
postgresql_1 | postgres: could not access directory "/var/lib/pgsql/data": No such file or directory
postgresql_1 | Run initdb or pg_basebackup to initialize a PostgreSQL data directory.
postgresql_1 | Creating database "smpp"...
postgresql_1 | postgres: could not access directory "/var/lib/pgsql/data": No such file or directory
postgresql_1 | Run initdb or pg_basebackup to initialize a PostgreSQL data directory.
postgresql_1 | Granting access to database "smpp" for user "golang"...
postgresql_1 | postgres: could not access directory "/var/lib/pgsql/data": No such file or directory
postgresql_1 | Run initdb or pg_basebackup to initialize a PostgreSQL data directory.
postgresql_1 | configure postgresql.conf:
postgresql_1 | sed: can't read /var/lib/pgsql/data/postgresql.conf: No such file or directory
postgresql_1 | run server:
postgresql_1 | postgres: could not access directory "/var/lib/pgsql/data": No such file or directory
postgresql_1 | Run initdb or pg_basebackup to initialize a PostgreSQL data directory.
smpp_postgresql_1 exited with code 0


Docker compose
version: '2'
services:
###Go Service SMPP
  smpp-go:
    restart: always
    build: ./app
    ports:
       - "6070:8080/tcp"
#     sysctls:
#       - net.core.somaxconn: 1024
###База Pg тут храниться билинг и статистика
  postgresql:
     image: smpp2/postgresql
     restart: always
     ##примонтируем область докера к хостовому серверу
     volumes:
       - ./postgres-data:/var/lib/pgsql
     environment:
            - 'POSTGRES_USER=golang'
            - 'POSTGRES_PASSWORD=dctlkznfrcb'
            - 'POSTGRES_DB=smpp'
     ports:
         - "5432:5432/tcp"


Dockerfile

FROM centos:latest

RUN rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

RUN yum update -y ; yum -y install postgresql96-server postgresql96-devel postgresql96-contrib ; yum clean all
RUN yum -y install sudo

#ENV PATH /sbin:/bin:/usr/sbin:/usr/bin:/usr/pgsql-9.6/bin:$PATH
ENV PGDATA /var/lib/pgsql/data

ADD ./postgresql-setup /usr/bin/postgresql-setup
ADD ./sudoers /etc/sudoers
ADD ./start_postgres.sh /start_postgres.sh

RUN chmod +x /usr/bin/postgresql-setup
RUN chmod +x /start_postgres.sh

RUN /usr/bin/postgresql-setup initdb

ADD ./postgresql.conf /var/lib/pgsql/data/postgresql.conf

RUN chown  postgres:postgres /var/lib/pgsql/data/postgresql.conf

RUN echo "host    all             all             all               trust" >> /var/lib/pgsql/data/pg_hba.conf

VOLUME ["/var/lib/pgsql"]
EXPOSE 5432

LABEL descr = Create user and cnfigure pg_hba.conf

CMD ["/bin/bash", "/start_postgres.sh"]


Bash Script
#!/bin/bash

DB_NAME=${POSTGRES_DB:-}
DB_USER=${POSTGRES_USER:-}
DB_PASS=${POSTGRES_PASSWORD:-}
PG_CONFDIR="/var/lib/pgsql/data"

__create_user() {
  #Grant rights

  #echo create user params:
  #echo $DB_NAME
  #echo $DB_USER
  #echo $DB_PASS

  usermod -G wheel postgres

  # Check to see if we have pre-defined credentials to use
if [ -n "${DB_USER}" ]; then
  if [ -z "${DB_PASS}" ]; then
    echo ""
    echo "WARNING: "
    echo "No password specified for \"${DB_USER}\". Generating one"
    echo ""
    DB_PASS=$(pwgen -c -n -1 12)
    echo "Password for \"${DB_USER}\" created as: \"${DB_PASS}\""
  fi
    echo "Creating user \"${DB_USER}\"..."
    echo "CREATE ROLE ${DB_USER} with CREATEROLE login superuser PASSWORD '${DB_PASS}';" |
      sudo -u postgres -H postgres --single \
       -c config_file=${PG_CONFDIR}/postgresql.conf -D ${PG_CONFDIR}
  
fi

if [ -n "${DB_NAME}" ]; then
  echo "Creating database \"${DB_NAME}\"..."
  echo "CREATE DATABASE ${DB_NAME};" | \
    sudo -u postgres -H postgres --single \
     -c config_file=${PG_CONFDIR}/postgresql.conf -D ${PG_CONFDIR}

  if [ -n "${DB_USER}" ]; then
    echo "Granting access to database \"${DB_NAME}\" for user \"${DB_USER}\"..."
    echo "GRANT ALL PRIVILEGES ON DATABASE ${DB_NAME} to ${DB_USER};" |
      sudo -u postgres -H postgres --single \
      -c config_file=${PG_CONFDIR}/postgresql.conf -D ${PG_CONFDIR}
  fi
fi
}


#__run_supervisor() {
#supervisord -n
#}

__run (){
 #echo configure pg_hba.conf:
 # not needet - done in dockerfile
 #sed -i -e 's/ident/trust/g' /var/lib/pgsql/data/pg_hba.conf
 #sed -i -e 's/md5/trust/g' /var/lib/pgsql/data/pg_hba.conf
 #sed -i -e 's/peer/trust/g' /var/lib/pgsql/data/pg_hba.conf

echo configure postgresql.conf:
sed -itmp -e 's/#listen_addresses = \x27localhost\x27/listen_addresses = \x27*\x27/g' /var/lib/pgsql/data/postgresql.conf

echo run server:
su postgres -c '/usr/pgsql-9.6/bin/postgres -D /var/lib/pgsql/data'

}

##иницилизируем волуме
__run_volume (){
 if [ ! -d /var/lib/pgsql ]; then
    # Выставляем правильные права доступа
    chown postgres:postgres /var/lib/pgsql
    # Инициализируем системные таблицы
    /usr/bin/postgresql-setup initdb
fi

}

# Call all functions
#__run_volume
__create_user
__run


#__run_supervisor
  • Вопрос задан
  • 181 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы