我使用了golem管道来打包和docker化我的应用程序。
对于初学者来说,我正在尝试使用docker在Windows pc上本地部署该应用程序(也尝试在具有相同问题的linux上运行它)。该应用程序从也在我的PC上运行的本地SQlite数据库收集数据(一旦部署在服务器上,该数据库就会类似)。
当我以包形式运行应用程序时,应用程序功能正常。 但是,一旦我创建了docker映像并运行它,该应用便启动了,但无法连接到本地sql数据库,并返回以下错误: 无法通过套接字'/var/run/mysqld/mysqld.sock'(2个“无此文件或目录”)连接到本地MySQL服务器
与应用程序内部数据库的连接如下:
con = dbConnect(RMariaDB::MariaDB(), dbname = "training_dash_db", user = "root", password = "", host = '127.0.0.1')
我的docker文件如下:
FROM rocker/tidyverse:3.5.3
RUN R -e 'install.packages("remotes")'
RUN R -e 'remotes::install_github("r-lib/remotes", ref = "97bbf81")'
RUN R -e 'remotes::install_cran("shiny")'
RUN R -e 'remotes::install_github("Thinkr-open/golem")'
RUN R -e 'remotes::install_cran("processx")'
RUN R -e 'remotes::install_cran("attempt")'
RUN R -e 'remotes::install_cran("DT")'
RUN R -e 'remotes::install_cran("glue")'
RUN R -e 'remotes::install_cran("htmltools")'
RUN R -e 'remotes::install_cran("shinydashboard")'
RUN R -e 'remotes::install_cran("shinydashboardPlus")'
RUN R -e 'remotes::install_cran("lubridate")'
RUN R -e 'remotes::install_cran("dplyr")'
RUN R -e 'remotes::install_cran("purrr")'
RUN R -e 'remotes::install_cran("plotly")'
RUN R -e 'remotes::install_cran("DBI")'
RUN R -e 'remotes::install_cran("tibbletime")'
RUN R -e 'remotes::install_cran("tsibble")'
RUN R -e 'remotes::install_cran("shinyWidgets")'
RUN R -e 'remotes::install_cran("leaflet")'
RUN R -e 'remotes::install_cran("pool")'
RUN R -e 'remotes::install_cran("RMariaDB")'
RUN R -e 'remotes::install_cran("roxygen2")'
COPY K2dashboard_*.tar.gz /app.tar.gz
RUN R -e 'remotes::install_local("/app.tar.gz")'
EXPOSE 80
EXPOSE 3306
CMD R -e "options('shiny.port'=80,shiny.host='0.0.0.0');K2dashboard::run_app()"
谢谢。
答案 0 :(得分:1)
这是我可以看到的问题:
您正在使用127.0.0.1作为数据库的主机。一旦进入容器,此地址即是容器的内部IP ,而不是主机/另一个容器中的IP。因此,您的应用无法访问主机数据库。
您尚未在容器中安装MariaDB驱动程序
以下是解决方案:
您可以将r-db
码头工人镜像用作源:http://colinfay.me/r-db/,其中包含MariaDB驱动程序:http://colinfay.me/r-db/mariadb-rmariadb.html
取决于您的MYSQL是否在docker中,但是您可以创建一个Docker网络,并在该网络上插入mysql容器和golem容器。然后使用host = "my-network"
。有关此信息,请参见r-db
文档:http://colinfay.me/r-db/intro.html#creating-docker-network和mariadb部分的http://colinfay.me/r-db/mariadb-rmariadb.html
您要从容器内部访问计算机上的数据库:有关此信息,请参见How to access host port from docker container。