Mam pytanie dotyczące docker i postgres. Ustanawiam nową bazę danych PostgreS za każdym razem, gdy uruchamiany jest docker i chcę zaimportować dany zrzut.Docker-Compose Postgresql import dump
mój problem jest podobny, ale odpowiedzi nie są wystarczające dla mnie: Docker postgres does not run init file in docker-entrypoint-initdb.d
Docker-Compose:
postgres:
environment:
- POSTGRES_USER=****
- POSTGRES_PASSWORD=****
- POSTGRES_DB=****
build:
context: .
dockerfile: dockerfile-postgres
My Dockerfile: (próbowałem go już ze skryptu z SH kończąc)
FROM postgres
ADD dump.sql /docker-entrypoint-initdb.d/
Zgodnie z https://hub.docker.com/_/postgres/ do zaimportowania bazy danych należy użyć dump.sql.
Uruchamianie aplikacji z docker daje tylko:
postgres_1 | LOG: invalid record length at 0/1708600
postgres_1 | LOG: redo is not required
postgres_1 | LOG: MultiXact member wraparound protections are now enabled
postgres_1 | LOG: database system is ready to accept connections
postgres_1 | LOG: autovacuum launcher started
Poza Testowałem jeśli baza danych została importowana, nie ma tabeli w mojej bazy danych. Co robię źle (pliki są odczytywane i wykonywalne w systemie docelowym)? Importowanie go za pomocą psql nie stanowi problemu, więc mój zrzut jest poprawny.
Mam nadzieję, że możesz mi pomóc i chcę z góry podziękować za to.
Mam nadzieję, że dobrze to zapamiętam, ale "ADD" działa tylko magicznie, gdy jest adresem URL jak w [Docker COPY vs ADD] (http://stackoverflow.com/questions/24958140/docker-copy-vs-add) omówione. Czy nie chcesz uruchomić 'pr_restore' i podać ścieżkę do swojej kopii' dump.sql'? ... ale może 'pg_restore' nie działa z wariantem kontenerowym (ponieważ komentarz - 18 dni - na stronie centrum dokowania postgres sugeruje) – Dilettant
Tak, myślałem o kopiowaniu i wypróbowaniu go, ten sam wynik. Plik jest poprawnie trafiony. Próbowałem już z pqdump i skryptem sh w tym folderze. Skrypt powinien mieć tylko nazwę: pg_restore -d nazwa_bazy_danych /tmp/dump.backup. Sam pg_restore pracował na maszynie docelowej, ale skrypt nie jest wykonywany – Simon
To jest pg_restore, co chcesz - nie zrzucaj tego, co jest w DB, ale wypełnij, prawda? – Dilettant