Как подключиться к PostgreSQL, работающему в Docker-контейнере, из локального R? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть локальный Docker-контейнер, работающий на PostgreSQL.Я хочу иметь возможность подключаться и взаимодействовать с этой базой данных из R, запущенной на моем хост-компьютере (Mac OS).

Я могу подключиться с помощью pgadmin4 по следующему адресу

http://0.0.0.0:5434/browser/

, а затем добавить новый сервер:

Добавить новый сервер.Вкладка «Общие» -> name: tagbase.Вкладка «Соединение» -> Имя хоста / адрес: postgres.Вкладка «Соединение» -> Порт: 5432. Вкладка «Соединение» -> База данных обслуживания: postgres.Вкладка «Соединение» -> Имя пользователя: tagbase

Это прекрасно работает.

Однако для подключения из RI попробуйте:

require("RPostgreSQL")

# load the PostgreSQL driver
drv <- dbDriver("PostgreSQL")

# create a connection to the postgres database
con <- RPostgreSQL::dbConnect(drv, dbname = "postgres",
                 host = "localhost", port = 5434,
                 user = "tagbase", password = "tagbase")

Эта попытка просто зависает, пока не произойдет сбой R.

Возможно, жизнеспособное решение - это что-то похожее на this .Большое спасибо за любую помощь.


РЕДАКТИРОВАТЬ - 20190207

Спасибо за комментарии.Я внес изменения без каких-либо улучшений, но согласился, что изменения необходимы.

Я успешно запускаю эту сеть докеров (из 3 контейнеров) через терминал, как показано ниже.Мне кажется, что я хочу подключиться к контейнеру postgres на 0.0.0.0 через порт 5432, правильно?

$ docker-compose up
Starting tagbase-server_postgres_1_3f42d4fc1a77 ... done
Starting tagbase-server_pgadmin4_1_52ab92a49f22 ... done
Starting tagbase-server_tagbase_1_9d3a22c8be46  ... done
Attaching to tagbase-server_postgres_1_3f42d4fc1a77, tagbase-server_pgadmin4_1_52ab92a49f22, tagbase-server_tagbase_1_9d3a22c8be46
postgres_1_3f42d4fc1a77 | 2019-02-05 19:35:45.999 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432

Я думал, что подключался к серверу через R точно так же, как я использовал pgadmin, но следующее не работает:

# create a connection to the postgres database
con <- DBI::dbConnect(RPostgreSQL::PostgreSQL(), dbname = "postgres",
                  host = "0.0.0.0", port = 5432,
                  user = "tagbase", password = "tagbase")

Error in postgresqlNewConnection(drv, ...) : 
RS-DBI driver: (could not connect tagbase@0.0.0.0:5432 on dbname "postgres": 
FATAL:  role "tagbase" does not exist)

Теперь я понимаю, что pgadminтакже работает в сети контейнера докеров.Таким образом, локальный хост для соединения pgadmin является сервером базы данных.Похоже, мне нужно решение, подобное this

Обратите внимание, что источником для сборок докера является здесь , следуя инструкциям здесь .

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