Mark Bower
Mark Bower

Reputation: 589

Error installing RMySQL to run in Docker on Mac OS X

I am trying to run MySQL in an R script running inside a Docker (actually Rocker) container, but am getting an error on the “install_packages(…” step. The only solution I found that was somewhat similar was specific to running RedHat Linux (I am running Mac OS X 10.15) and the solution included pointing to several directories that I do not have. Running under RStudio or from the command line, RMySQL loads without a problem.

Dockerfile:

FROM rocker/r-ver:latest
  
RUN mkdir /home/analysis

COPY install_packages.R /home/analysis/install_packages.R
COPY script_basic.R /home/analysis/script_basic.R

RUN Rscript /home/analysis/install_packages.R

CMD Rscript /home/analysis/script_basic.R

R files:

script_basic.R

library( RMySQL )

install_packages.R

install_packages(“RMySQL”)

Commands and responses:

$ docker build -t myapp .

…
Successfully tagged myapp:latest

$ docker run -it --rm myapp
Loading required package: DBI
Error: package or namespace load failed for ‘RMySQL’ in dyn.load(file, DLLpath = DLLpath, ...):
 unable to load shared object '/usr/local/lib/R/site-library/RMySQL/libs/RMySQL.so':
  libmysqlclient.so.21: cannot open shared object file: No such file or directory
Execution halted
$ 



Upvotes: 0

Views: 594

Answers (1)

r2evans
r2evans

Reputation: 160447

I believe that rocker/r-dev does not include the libraries you need to get this to run. Untested, but try something like this.

Dockerfile

FROM rocker/r-ver:latest
  
RUN mkdir /home/analysis

RUN apt-get update \
  && apt-get install -y --no-install-recommends libmariadbclient-dev

COPY install_packages.R /home/analysis/install_packages.R
COPY script_basic.R /home/analysis/script_basic.R

RUN Rscript /home/analysis/install_packages.R

CMD Rscript /home/analysis/script_basic.R

You can find the need for certain libraries on https://cran.r-project.org/web/packages/RMySQL/index.html, as

SystemRequirements:     libmariadb-client-dev | libmariadb-client-lgpl-dev | libmysqlclient-dev (deb), mariadb-devel (rpm), mariadb | mysql-connector-c (brew), mysql56_dev (csw)

and a note on how to install them in RMySQL's github README.md's Installation section.

(The CRAN page references libmysqlclient-dev, but the github page suggests "the mariadb implementation is much better". I don't know the premise of the statement, just explaining why I suggested one and CRAN listed another.)

Upvotes: 1

Related Questions