Получение ошибки при запуске DockerFile для создания и восстановления дампа с помощью pg_restore - PullRequest
2 голосов
/ 10 июля 2020

Мой файл инициализации sql:

CREATE USER postgres WITH PASSWORD '123qwe';
CREATE DATABASE gmta_database ;
GRANT ALL PRIVILEGES ON DATABASE gmta_database TO postgres;

И DockerFile:

FROM postgres:latest
COPY init.sql /docker-entrypoint-initdb.d/

ENV POSTGRES_USER postgres
ENV POSTGRES_PASSWORD 123qwe 
ENV POSTGRES_DB docker_pg 

EXPOSE 5432
COPY test_latest.sql /

VOLUME /var/lib/postgresql/data

RUN pg_restore -U postgres -d docker_pg < test_latest.sql 

Когда я запускаю с помощью команды docker build -t gmta-test-vol:1.0.0 ., я получаю такую ​​ошибку:

    Sending build context to Docker daemon  358.4kB
    Step 1/7 : FROM postgres:latest
     ---> b97bae343e06
    Step 2/7 : COPY init.sql /docker-entrypoint-initdb.d/
    ---> Using cache
    ---> 6f275b44db01
   Step 3/7 : ENV POSTGRES_USER postgres
   ---> Using cache
   ---> 039924093b36
   Step 4/7 : ENV POSTGRES_PASSWORD 123qwe
   ---> Using cache
    ---> 5e636686a2f7
   Step 5/7 : ENV POSTGRES_DB docker_pg
    ---> Using cache
    ---> 9c0a773c138c
    Step 6/7 : COPY gtma_latest.sql /
    ---> Using cache
     ---> 8dd99f79b403
    Step 7/7 : RUN pg_restore -U postgres -d docker_pg < gtma_latest.sql
    ---> Running in 1e0a85650eb1
          pg_restore: error: connection to database "docker_pg" failed: could not connect to server: No such file or directory
            Is the server running locally and accepting
            connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Я хочу создать базу данных и восстановить данные дампа с помощью одной команды docker.

  1. Как я могу решить проблему?
  2. Есть возможно ли запустить команду pg_store без создания контейнера docker?

Пожалуйста, помогите. Заранее спасибо.

1 Ответ

2 голосов
/ 10 июля 2020

Вы не должны импортировать данные во время сборки, так как сервер БД не готов, и это не приведет к постоянному импорту для следующего слоя.

Все, что вам нужно добавить

COPY test_latest.sql /docker-entrypoint-initdb.d/

Если вы хотите выполнить дополнительную инициализацию образа, полученного из этого, добавьте один или несколько сценариев *.sql, *.sql.gz, or *.sh в /docker-entrypoint-initdb.d (при необходимости создав каталог). После того, как точка входа вызывает initdb для создания пользователя и базы данных по умолчанию postgres, она запускает любые *.sql файлы, запускает любые исполняемые сценарии *. sh и отправляет любые неисполняемые сценарии *.sh, найденные в этом каталоге, для выполните дальнейшую инициализацию перед запуском службы.

postgres init

Как решить проблему?

Просто поместите файл sql в /docker-entrypoint-initdb.d/, и контейнер Postgres позаботится об этом.

Возможно ли ЗАПУСТИТЬ команду pg_store без создания контейнера docker?

Нет, поместите копию при сборке, она будет создавать базу данных при каждом запуске контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...