Скопируйте данные таблицы локальной базы данных в базу данных docker postgtesql в Mac OSX - PullRequest
0 голосов
/ 15 марта 2019

Я работаю в приложении rails, и я развернул свое приложение в Docker. Моя локальная база данных имеет около 100 таблиц с данными. Я хочу перенести эти данные таблицы в мой докер postgresql db. Как скопировать данные таблицы локальной базы данных в Dockerбаза данных postgtesql?Я добавил журналы Docker PS ниже.

The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

  Data page checksums are disabled.

 fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
 running bootstrap script ... ok
 performing post-bootstrap initialization ... ok
 syncing data to disk ... ok

 Success. You can now start the database server using:

pg_ctl -D /var/lib/postgresql/data -l logfile start


 WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
****************************************************
WARNING: No password has been set for the database.
     This will allow anyone with access to the
     Postgres port to access your database. In
     Docker's default configuration, this is
     effectively any other container on the same
     system.

     Use "-e POSTGRES_PASSWORD=password" to set
     it in "docker run".
 ****************************************************
 waiting for server to start....2019-03-15 12:22:41.584 UTC [42] LOG:  
listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
 2019-03-15 12:22:41.600 UTC [43] LOG:  database system was shut down at 
 2019- 
  03-15 12:22:40 UTC
 2019-03-15 12:22:41.609 UTC [42] LOG:  database system is ready to accept 
 connections
 done
 server started

  /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*

 waiting for server to shut down...2019-03-15 12:22:41.674 UTC [42] LOG:  
 received fast shutdown request
.2019-03-15 12:22:41.677 UTC [42] LOG:  aborting any active transactions
2019-03-15 12:22:41.680 UTC [42] LOG:  background worker "logical replication 
launcher" (PID 49) exited with exit code 1
2019-03-15 12:22:41.680 UTC [44] LOG:  shutting down
2019-03-15 12:22:41.700 UTC [42] LOG:  database system is shut down
done server stopped

 PostgreSQL init process complete; ready for start up. 

2019-03-15 12:22:41.788 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", 
port 5432
2019-03-15 12:22:41.788 UTC [1] LOG:  listening on IPv6 address "::", port 
5432
2019-03-15 12:22:41.792 UTC [1] LOG:  listening on Unix socket 
"/var/run/postgresql/.s.PGSQL.5432"
2019-03-15 12:22:41.807 UTC [51] LOG:  database system was shut down at 
2019- 
03-15 12:22:41 UTC
2019-03-15 12:22:41.812 UTC [1] LOG:  database system is ready to accept 
connections
2019-03-15 12:23:41.118 UTC [81] FATAL:  database "MyAPP" does not exist

1 Ответ

0 голосов
/ 15 марта 2019

Вы можете создать дамп из вашего локального / удаленного postgres с помощью следующей команды:

pg_dump dbname > dbname.sql

Далее вам нужно будет смонтировать этот файл dbname.sql в следующем каталоге вашего контейнера, возможно, через docker-compose или docker run -v:

/docker-entrypoint-initdb.d/

При запуске контейнера он восстанавливает файл в базе данных, как вы можете видеть в docker-entrypoint.sh для изображения postgres. Имеет возможность запуска файлов sql, sql.gz, sh.

Например, предположим, у вас есть dump.sql внутри /home/foo/database_files, и вам нужно восстановить этот dump.sql в контейнер, после чего вы можете выполнить следующую команду:

dokcer run -v /home/foo/database_files:/docker-entrypoint-initdb.d/ -d --name new_postgres_container postgres

Затем запустите docker ps, чтобы убедиться, что ваш новый контейнер работает, и вы также можете проверить журналы, используя docker logs new_postgres_container

В качестве альтернативы, вы можете смонтировать локальный путь к каталогу postgres в ваш контейнер при его создании с помощью опции -v, которая будет передана команде docker run, или добавить ее в docker-compose.yml

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