gpt4 book ai didi

通过 docker 的 Rstudio 无法读取/etc/.odbc.ini,只能读取 ~/.odbc.ini

转载 作者:行者123 更新时间:2023-12-02 17:59:49 24 4
gpt4 key购买 nike

当我构建然后运行在 Ubuntu 上运行 rstudio 的 Docker 容器时,当我在构建期间添加 odbc.ini 文件时,odbc 连接不起作用。但是,如果我从构建中省略 odbc.ini 文件,而是自己从正在运行的容器中添加它,则连接确实有效。

所以我的问题是,每当运行此镜像时,我都会尝试启动 odbc 连接并立即运行,而无需登录到 ubuntu 容器实例并将连接详细信息添加到 odbc.ini 文件的额外步骤。

这是 odbc.ini 文件的样子,带有虚拟数据:

[PostgreSQL ANSI]
Driver = PostgreSQL ANSI
Database = GoogleData
Servername = somename.postgres.database.azure.com
UserName = docker_rstudio@somename
Password = abc123abc
Port = 5432
sslmode = require

我在我的 repo 目录中有这个文件 odbc.ini 的副本,然后将其包含在构建中。我的 Docker 文件。
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 登录到实例,则连接不起作用,我会收到以下错误消息:

Error: nanodbc/nanodbc.cpp:983: 00000: 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"?



如果我查看带有 less /etc/odbc.ini 的文件我确实看到了每个顶部代码块的连接详细信息。

如果我然后用 cp /etc/odbc.ini /home/rstudio/.odbc.ini 复制到家里然后,在那之后,我的连接确实有效。

但是,即使我用 ADD odbc.ini /home/rstudio/.odbc.ini 修改我的 dockerfile ,连接不起作用。它仅在我手动添加到/home/rstudio/.odbc.ini 时才有效。

所以我的问题有两个:
  • 无论我尝试什么,我都无法让 ubuntu 检测到/etc/odbc.ini 以用作 odbc 连接字符串。无论是通过 Dockerfile 还是手动添加它。我更喜欢这个,因为我想连接到任何使用容器的人。
  • 当我手动将上面 odbc.ini 中的内容复制到 /home/rstudio/.odbc.ini 时,我能够建立连接但是,如果我尝试通过 docker build 执行此操作,则连接不起作用。我确实在那里看到了文件。它与所有正确的数据一起存在,只是没有被 odbc 检测到。

  • 如果它是相关的:
    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

    最佳答案

    我认为问题在于您的 /etc/odbc.ini 的格式。 .我没有你所有的脚本,但这是 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
    RUN Rscript -e 'install.packages(c("DBI","odbc"))'
    ADD ./odbc.ini /etc/odbc.ini

    如果我使用 odbc.ini这个的:
    [mydb]
    Driver = PostgreSQL ANSI
    ServerName = 127.0.0.1
    UserName = postgres
    Password = mysecretpassword
    Port = 35432

    我看到了这个(docker build 和 R 启动消息被截断):

    $ docker build -t quux2 .
    $ docker run --net='host' -it --rm quux2 bash
    > con <- DBI::dbConnect(odbc::odbc(), "mydb")
    Error: nanodbc/nanodbc.cpp:983: 00000: 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"?

    当我将文件的缩进更改为:
    [mydb]
    Driver = PostgreSQL ANSI
    ServerName = 127.0.0.1
    UserName = postgres
    Password = mysecretpassword
    Port = 35432

    我看到这个:

    $ docker build -t quux3 .
    $ docker run --net='host' -it --rm quux3 bash
    > con <- DBI::dbConnect(odbc::odbc(), "mydb")
    > DBI::dbGetQuery(con, "select 1 as a")
    a
    1 1

    (对于这个演示,我将 postgres:11 作为另一个容器运行,但我认为这无关紧要,它是缩进的值。)

    关于通过 docker 的 Rstudio 无法读取/etc/.odbc.ini,只能读取 ~/.odbc.ini,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62072634/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com