Когда я собираю, а затем запускаю контейнер Docker, который запускает rstudio в Ubuntu, соединение odb c не работает, когда я добавляю файл odb c .ini во время сборки. Однако, если я оставлю файл odb c .ini из сборки и вместо этого добавлю его сам из работающего контейнера, соединение действительно будет работать.
Итак, моя проблема в том, что я пытаюсь получить соединение odb c запускается и запускается из коробки всякий раз, когда этот образ запускается, без дополнительного шага, связанного с необходимостью входа в экземпляр контейнера ubuntu и добавления деталей соединения в файл odb c .ini.
Вот как выглядит файл odb c .ini с фиктивными данными:
[PostgreSQL ANSI]
Driver = PostgreSQL ANSI
Database = GoogleData
Servername = somename.postgres.database.azure.com
UserName = docker_rstudio@somename
Password = abc123abc
Port = 5432
sslmode = require
У меня есть копия этого файла odb c .ini в моем каталоге репо, а затем я включаю это в сборке. My DockerFile.
FROM rocker/tidyverse:3.6.3
ENV ADD=SHINY
ENV ROOT=TRUE
ENV PASSWORD='abc123'
RUN apt-get update && apt-get install -y \
less \
vim \
unixodbc unixodbc-dev \
odbc-postgresql
ADD odbc.ini /etc/odbc.ini
ADD install_packages.R /tmp/install_packages.R
RUN Rscript /tmp/install_packages.R && rm -R /tmp/*
ADD flagship_ecommerce /home/rstudio/blah/zprojects/flagship_ecommerce
ADD commission_junction /home/rstudio/blah/zprojects/commission_junction
RUN mkdir /srv/shiny-server; ln -s /home/rstudio/blah/zprojects/ /srv/shiny-server/
Если я затем войду в экземпляр через rstudio, соединение не будет работать, я получаю это сообщение об ошибке:
Ошибка: nanodbc / nanodb c. cpp: 983: 00000: не удалось подключиться к серверу: нет такого файла или каталога. Сервер работает локально и принимает соединения на доменном сокете Unix "/var/run/postgresql/.s.PGSQL .5432 "?
Если я посмотрю на файл с less /etc/odbc.ini
, я действительно увижу детали подключения для моего верхнего блока кода.
Если я затем скопирую на главную с cp /etc/odbc.ini /home/rstudio/.odbc.ini
, то после этого мое соединение работает.
Но, даже если я изменю свой файл докеров с помощью ADD odbc.ini /home/rstudio/.odbc.ini
, соединение не работает. Это работает только тогда, когда я вручную добавляю в /home/rstudio/.odbc.ini.
Итак, у меня две проблемы:
Независимо от того, что я попробуйте, я не могу заставить /etc/odbc.ini быть обнаруженным ubuntu для использования в качестве строки подключения odb c. Будь то через Dockerfile или добавив его вручную. Я бы предпочел это, поскольку я хочу, чтобы подключение было доступно для всех, кто использует контейнер.
Я могу получить подключение, когда вручную копирую содержимое odb c .ini выше на /home/rstudio/.odbc.ini
, однако, если я попытаюсь сделать это через сборку docker, соединение не будет работать. Я вижу там файл. Он существует со всеми правильными данными, его просто не обнаруживает odb c.
Если актуально:
odbcinst -j
unixODBC 2.3.6
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/rstudio/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8