英文:
Dockerizing a shiny app with an error in the building process
问题
I built a shiny app couple of months ago and i've been trying to deploy it into a docker for a while...with no success. I checked some other questions like [this one][1] and some other webs, youtube videos but I always get errors builing it.
一段时间前,我创建了一个Shiny应用程序,一直在尝试将其部署到Docker中...但一直没有成功。我查看了一些类似于[这个问题][1]以及其他一些网站和YouTube视频,但每次构建时都会出现错误。
One of the things I saw different is the structure of the app. Most of them, not all, have the simplest structure:
其中一个我发现不同的是应用程序的结构。大多数应用程序,而不是全部,都具有最简单的结构:
- app
|
|-ui.R
|-server.R
dockerfile
一个名为app的文件夹,其中包含ui和server两个文件,以及与文件夹同级的dockerfile。
My structure is a little bit different.
我的结构略有不同。
- app
- renv
- library
- activate.R
- settings.json
- src
- Carga_datos.R
- packages.R
- Descriptivo_aplicacion.R
- www
- image.png
- server.R
- ui.R
- app.R
- renv
- dockerfile
我的结构略有不同。
My last try with the dockerfile was:
我最后一次尝试使用Dockerfile如下:
FROM rocker/shiny:latest
RUN apt-get update -qq && apt-get -y --no-install-recommends install \
libxml2-dev \
libxml2 \
libcairo2-dev \
libsqlite3-dev \
libmariadbd-dev \
libpq-dev \
libssh2-1-dev \
unixodbc-dev \
libcurl4-openssl-dev \
libssl-dev
## update system libraries
RUN apt-get update && \
apt-get upgrade -y && \
apt-get -y install r-cran-curl && \
apt-get clean
# copy necessary files
## renv.lock file
COPY /app/renv.lock ./renv.lock
## app folder
COPY /app ./app
# install renv & restore packages
RUN Rscript -e 'install.packages("renv")'
RUN Rscript -e 'renv::restore()'
# expose port
EXPOSE 3838
# run app on container start
CMD ["R", "-e", "shiny::runApp('/app', host = '0.0.0.0', port = 3838)"]
我的最后一次尝试使用Dockerfile如下:
FROM rocker/shiny:latest
RUN apt-get update -qq && apt-get -y --no-install-recommends install \
libxml2-dev \
libxml2 \
libcairo2-dev \
libsqlite3-dev \
libmariadbd-dev \
libpq-dev \
libssh2-1-dev \
unixodbc-dev \
libcurl4-openssl-dev \
libssl-dev
## update system libraries
RUN apt-get update && \
apt-get upgrade -y && \
apt-get -y install r-cran-curl && \
apt-get clean
# copy necessary files
## renv.lock file
COPY /app/renv.lock ./renv.lock
## app folder
COPY /app ./app
# install renv & restore packages
RUN Rscript -e 'install.packages("renv")'
RUN Rscript -e 'renv::restore()'
# expose port
EXPOSE 3838
# run app on container start
CMD ["R", "-e", "shiny::runApp('/app', host = '0.0.0.0', port = 3838)"]
Errors had been changing, every time I try to create the container with the sentence:
错误一直在变化,每次我尝试使用以下命令创建容器时:
docker build -t actividades .
docker build -t actividades .
I cannot see the error, to be honest.
老实说,我看不到错误。
Thank in advanced and in case more information is needed...happy to share, even to create a repo in github and give access to the code, no problem at all.
提前感谢,如果需要更多信息...乐意分享,甚至创建一个GitHub仓库并提供代码访问权限,完全没问题。
EDIT:
编辑:
I am adding the last part of the message error:
我添加错误消息的最后部分:
#0 2987.8 Using PKG_LIBS=-lfreetype -lharfbuzz -lfribidi -lpng
#0 2987.8 --------------------------- [ANTICONF] --------------------------------
#0 2987.8 Configuration failed to find the harfbuzz freetype2 fribidi library. Try installing:
#0 2987.8 * deb: libharfbuzz-dev libfribidi-dev (Debian, Ubuntu, etc)
#0 2987.8 * rpm: harfbuzz-devel fribidi-devel (Fedora, EPEL)
#0 2987.8 * csw: libharfbuzz_dev libfribidi_dev (Solaris)
#0 2987.8 * brew: harfbuzz fribidi (OSX)
#0 2987.8 If harfbuzz freetype2 fribidi is already installed, check that 'pkg-config' is in your
#0 2987.8 PATH and PKG_CONFIG_PATH contains a harfbuzz freetype2 fribidi.pc file. If pkg-config
#0 2987.8 is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:
#0 2987.8 R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
#0 2987.8 -------------------------- [ERROR MESSAGE] ---------------------------
#0 2987.8 <stdin>:1:10: fatal error: hb-ft.h: No such file or directory
#0 2987.8 compilation terminated.
#0 2987.8 --------------------------------------------------------------------
#0 2987.8 ERROR: configuration failed for package ‘textshaping’
#0 2987.8 * removing ‘/usr/local/lib/R/site-library/.renv/1/textshaping’
#0 2987.8 Error: install of package 'textshaping' failed [error code 1]
#0 2987.9 Traceback (most recent calls last):
#0 2987.9 12: renv::restore()
#0 2987.9 11: renv_restore_run
<details>
<summary>英文:</summary>
I built a shiny app couple of months ago and i've been trying to deploy it into a docker for a while...with no success. I checked some other questions like [this one][1] and some other webs, youtube videos but I always get errors builing it.
One of the things I saw different is the structure of the app. Most of them, not all, have the simplest structure:
-app <br/>
|<br/>
|-ui.R <br/>
|-server.R <br/>
dockerfile
A folder called app with both files, ui and server and at the level of the folder the dockerfile.
My structure is a little bit different.
- app<br/>
* renv <br/>
* library
* activate.R
* settings.json
* src<br/>
* Carga_datos.R <br/>
* packages.R <br/>
* Descriptivo_aplicacion.R <br/>
* www <br/>
* image.png
* server.R<br/>
* ui.R <br/>
* app.R <br/>
- dockerfile
My last try with the dockerfile was:
FROM rocker/shiny:latest
RUN apt-get update -qq && apt-get -y --no-install-recommends install
libxml2-dev
libxml2
libcairo2-dev
libsqlite3-dev
libmariadbd-dev
libpq-dev
libssh2-1-dev
unixodbc-dev
libcurl4-openssl-dev
libssl-dev
update system libraries
RUN apt-get update &&
apt-get upgrade -y &&
apt-get -y install r-cran-curl &&
apt-get clean
copy necessary files
renv.lock file
COPY /app/renv.lock ./renv.lock
app folder
COPY /app ./app
install renv & restore packages
RUN Rscript -e 'install.packages("renv")'
RUN Rscript -e 'renv::restore()'
expose port
EXPOSE 3838
run app on container start
CMD ["R", "-e", "shiny::runApp('/app', host = '0.0.0.0', port = 3838)"]
Errors had been changing, every time I try to create the container with the sentence:
docker build -t actividades .
I cannot see the error, to be honest.
Thank in advanced and in case more information is needed...happy to share, even to create a repo in github and give access to the code, no problem at all.
EDIT:
I am adding the last part of the message error:
#0 2987.8 Using PKG_LIBS=-lfreetype -lharfbuzz -lfribidi -lpng
#0 2987.8 --------------------------- [ANTICONF] --------------------------------
#0 2987.8 Configuration failed to find the harfbuzz freetype2 fribidi library. Try installing:
#0 2987.8 * deb: libharfbuzz-dev libfribidi-dev (Debian, Ubuntu, etc)
#0 2987.8 * rpm: harfbuzz-devel fribidi-devel (Fedora, EPEL)
#0 2987.8 * csw: libharfbuzz_dev libfribidi_dev (Solaris)
#0 2987.8 * brew: harfbuzz fribidi (OSX)
#0 2987.8 If harfbuzz freetype2 fribidi is already installed, check that 'pkg-config' is in your
#0 2987.8 PATH and PKG_CONFIG_PATH contains a harfbuzz freetype2 fribidi.pc file. If pkg-config
#0 2987.8 is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:
#0 2987.8 R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
#0 2987.8 -------------------------- [ERROR MESSAGE] ---------------------------
#0 2987.8 <stdin>:1:10: fatal error: hb-ft.h: No such file or directory
#0 2987.8 compilation terminated.
#0 2987.8 --------------------------------------------------------------------
#0 2987.8 ERROR: configuration failed for package ‘textshaping’
#0 2987.8 * removing ‘/usr/local/lib/R/site-library/.renv/1/textshaping’
#0 2987.8 Error: install of package 'textshaping' failed [error code 1]
#0 2987.9 Traceback (most recent calls last):
#0 2987.9 12: renv::restore()
#0 2987.9 11: renv_restore_run_actions(project, diff, current, lockfile, rebuild)
#0 2987.9 10: renv_install_impl(records)
#0 2987.9 9: renv_install_staged(records)
#0 2987.9 8: renv_install_default(records)
#0 2987.9 7: handler(package, renv_install_package(record))
#0 2987.9 6: renv_install_package(record)
#0 2987.9 5: withCallingHandlers(renv_install_package_impl(record), error = function(e) {
#0 2987.9 vwritef("\tFAILED")
#0 2987.9 writef(e$output)
#0 2987.9 })
#0 2987.9 4: renv_install_package_impl(record)
#0 2987.9 3: r_cmd_install(package, path)
#0 2987.9 2: r_exec_error(package, output, "install", status)
#0 2987.9 1: stop(error)
#0 2989.1 Execution halted
Dockerfile:32
30 | # install renv & restore packages
31 | RUN Rscript -e 'install.packages("renv")'
32 | >>> RUN Rscript -e 'renv::restore()'
33 |
34 | # expose port
ERROR: failed to solve: process "/bin/sh -c Rscript -e 'renv::restore()'" did not complete successfully: exit code: 1
EDIT 2:
Now the dockerfile is compiled, I added:
install renv & restore packages
RUN R -e "install.packages(c('leaflet', 'dplyr', 'httr', 'jsonlite', 'shinyWidgets', 'shiny', 'stringr', 'tidyverse', 'htmltools', 'leaflet.extras', 'leaflet.extras2', 'raster', 'plotly', 'crosstalk', 'shinydashboard', 'later', 'htmlwidgets'), repos='https://cloud.r-project.org/')"
As suggested by Hailey but now when I try to execute the image:
docker run --rm -p 3838:3838 actividades
Everything looks fine but when I access to ```localhost:3838``` I got the error: ```object 'tidyverse' not found``` which is included in the list of the packages to be installed. Any idea?
Thank you in advance because the problem is evolving :)
[1]: https://stackoverflow.com/questions/44406631/deploy-shiny-app-in-rocker-shiny-docker
</details>
# 答案1
**得分**: 1
The docker image is not able to access your R environment to download packages. Instead of using `renv`, try to download each package in your Dockerfile. For example:
RUN R -e "install.packages(c('shiny', 'rmarkdown'), repos='https://cloud.r-project.org/')"
<details>
<summary>英文:</summary>
The docker image is not able to access your R environment to download packages. Instead of using `renv`, try to download each package in your Dockerfile. For example:
RUN R -e "install.packages(c('shiny', 'rmarkdown'), repos='https://cloud.r-project.org/')"
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论