R Docker: Не удается подключиться к локальному серверу MySQL через сокет - PullRequest
1 голос
/ 04 ноября 2019

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

Для начала я пытаюсь развернуть приложение локально на Windows PC с помощью Docker (также пытался запустить его на Linux с той же проблемой). Приложение собирает данные из локальной базы данных SQlite, также работающей на моем компьютере (которая будет аналогична после развертывания на сервере).

Когда я запускаю приложение как пакет, приложение работает нормально. Но как только я создаю образ докера и запускаю его, приложение запускается, но не может подключиться к моей локальной базе данных sql, возвращая эту ошибку: Невозможно подключиться к локальному серверу MySQL через сокет '/ var / run / mysqld /mysqld.sock '(2 «Нет такого файла или каталога»)

Подключение к базе данных внутри приложения выглядит следующим образом:

    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()"

Спасибо.

1 Ответ

1 голос
/ 04 ноября 2019

Вот проблемы, которые я вижу:

  • Вы используете 127.0.0.1 в качестве хоста для своей базы данных. Попав в контейнер, этот адрес ссылается на внутренний IP контейнера, а не адрес вашего хост-компьютера / другого контейнера. Таким образом, ваше приложение не может получить доступ к базе данных хоста.

  • Вы не установили драйверы для MariaDB внутри вашего контейнера

Вот решения:

...