У меня есть Shiny app
, который размещен в Ubuntu
.Это приложение зависит от данных, которые обновляются каждый день, а обновленные данные хранятся в локальном MySql server
.Чтобы получить данные, когда приложение
Statistics_FN = function() {
library(RMySQL)
mydb1 = RMySQL::dbConnect(MySQL(), user = 'Application', password = 'XXX*', dbname = 'YYY',
host = 'localhost', unix.socket = '/run/mysqld/mysqld.sock')
Statistics = RMySQL::fetch(dbSendQuery(mydb1, paste("select * from Weekly_Statistics")))
dbClearResult(dbListResults(mydb1)[[1]])
RMySQL::dbDisconnect(mydb1)
detach("package:RMySQL", unload = TRUE)
return(Statistics)
}
Statistics = Statistics_FN()
Теперь я докертизировал это приложение с помощью файла Docker, указанного ниже:
FROM r-base:3.5.0
RUN apt-get update && apt-get install -y \
sudo \
gdebi-core \
pandoc \
pandoc-citeproc \
libcurl4-gnutls-dev \
libcairo2-dev/unstable \
libudunits2-dev \
libxml2-dev \
libxt-dev \
libv8-dev \
libgdal-dev \
libssl-dev
RUN wget --no-verbose https://s3.amazonaws.com/rstudio-shiny-server-os-build/ubuntu-12.04/x86_64/VERSION -O "version.txt" && \
VERSION=$(cat version.txt) && \
wget --no-verbose "https://s3.amazonaws.com/rstudio-shiny-server-os-build/ubuntu-12.04/x86_64/shiny-server-$VERSION-amd64.deb" -O ss-latest.deb && \
gdebi -n ss-latest.deb && \
rm -f version.txt ss-latest.deb
RUN R -e "install.packages(c('shiny', 'shinydashboard'), repos='http://cran.rstudio.com/')"
RUN R -e "install.packages(c('purrr', 'RMySQL'), repos='http://cran.rstudio.com/', dependencies = TRUE)"
COPY shiny-server.conf /etc/shiny-server/shiny-server.conf
COPY /Vol_Lab /srv/shiny-server/
COPY shiny-server.sh /usr/bin/shiny-server.sh
CMD ["/usr/bin/shiny-server.sh"]
RUN mkdir /root/app
COPY App /root/app
COPY Rprofile.site /usr/lib/R/etc/
EXPOSE 8383
CMD ["R", "-e", "shiny::runApp('/root/app')"]
Однако при указанной выше конфигурации мне не удалось запустить приложение Dockerized.Когда я проверил docker logs 3655f065c1ed
, я вижу ниже строку ошибки
Error in .local(drv, ...) :
Failed to connect to database: Error: Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)
Я также попытался с host = '127.0.0.1', но не смог.
Может кто-то указывает мнев правильном направлении, как я могу подключиться к локальной базе данных MySql из моего приложения Shiny, содержащегося в Docker?
Измененные файлы server.R
и Docker
, основанные на ответе Дуй Фана: -
Statistics_FN = function() {
library(RMySQL)
mydb1 = RMySQL::dbConnect(MySQL(), user = 'Application', password = 'XXX*', dbname = 'YYY',
host = 'localhost', port = 3306)
Statistics = RMySQL::fetch(dbSendQuery(mydb1, paste("select * from Weekly_Statistics")))
dbClearResult(dbListResults(mydb1)[[1]])
RMySQL::dbDisconnect(mydb1)
detach("package:RMySQL", unload = TRUE)
return(Statistics)
}
Statistics = Statistics_FN()
Файл Docker -
FROM r-base:3.5.0
RUN apt-get update && apt-get install -y \
sudo \
gdebi-core \
pandoc \
pandoc-citeproc \
libcurl4-gnutls-dev \
libcairo2-dev/unstable \
libudunits2-dev \
libxml2-dev \
libxt-dev \
libv8-dev \
libgdal-dev \
libssl-dev
RUN wget --no-verbose https://s3.amazonaws.com/rstudio-shiny-server-os-build/ubuntu-12.04/x86_64/VERSION -O "version.txt" && \
VERSION=$(cat version.txt) && \
wget --no-verbose "https://s3.amazonaws.com/rstudio-shiny-server-os-build/ubuntu-12.04/x86_64/shiny-server-$VERSION-amd64.deb" -O ss-latest.deb && \
gdebi -n ss-latest.deb && \
rm -f version.txt ss-latest.deb
RUN R -e "install.packages(c('shiny', 'shinydashboard'), repos='http://cran.rstudio.com/')"
RUN R -e "install.packages(c('dplyr', 'tidyr', 'RMySQL'), repos='http://cran.rstudio.com/', dependencies = TRUE)"
COPY shiny-server.conf /etc/shiny-server/shiny-server.conf
COPY /FinDerivs /srv/shiny-server/
COPY shiny-server.sh /usr/bin/shiny-server.sh
CMD ["/usr/bin/shiny-server.sh"]
RUN mkdir /root/app
COPY App /root/app
COPY Rprofile.site /usr/lib/R/etc/
EXPOSE 7373
EXPOSE 3306
CMD ["R", "-e", "shiny::runApp('/root/app')"]
Я все еще получаю ту же ошибку:
Error in .local(drv, ...) :
Failed to connect to database: Error: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
** Информация от ** Docker PS ****
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0266e80a5464 5fe2ba858107 "R -e shiny::runApp(…" About an hour ago Up 28 minutes 3306/tcp, 0.0.0.0:7373->7373/tcp ecstatic_hypatia