Mi archivo init.sql es:
CREATE USER postgres WITH PASSWORD '123qwe'; CREATE DATABASE gmta_database ; GRANT ALL PRIVILEGES ON DATABASE gmta_database TO postgres;Y DockerFile es:
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 Cuando ejecuto con el comando docker build -t gmta-test-vol:1.0.0 . , recibo un error como este:
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"?Quiero crear la base de datos y restaurar los datos de volcado con un solo comando docker.
Por favor ayuda. Gracias por adelantado.
No debe importar datos en el momento de la compilación, ya que el servidor de base de datos no está listo y esto no persistirá en la importación para la capa posterior.
Todo lo que necesitas para agregar esto
COPY test_latest.sql /docker-entrypoint-initdb.d/Si desea realizar una inicialización adicional en una imagen derivada de esta, agregue uno o más scripts
*.sql, *.sql.gz, or *.shen/docker-entrypoint-initdb.d(creando el directorio si es necesario ). Después de que el punto de entrada llame a initdb para crear el usuario y la base de datos de postgres predeterminados, ejecutará cualquier archivo*.sql, ejecutará cualquier secuencia de comandos *.sh ejecutable y generará cualquier secuencia de comandos **.shno ejecutable que se encuentre en ese directorio para realizar una inicialización adicional antes. iniciando el servicio.
¿Cómo puedo resolver el problema?
Simplemente coloque el archivo sql en /docker-entrypoint-initdb.d/ y el contenedor de Postgres se encargará de ello.
¿Es posible EJECUTAR el comando pg_store sin crear el contenedor docker?
No, coloque la copia en la compilación, creará una base de datos cada vez que se inicie el contenedor.