2016-12-11 4 views
2

Ich dockeriere eine glänzende App, die das Paket 'mxnet' verwendet. Nach vielen Bemühungen kam ich zu dem Schluss, dass ich das Paket erstellen und installieren muss, anstatt es nur normal von den dmlc-Repos zu installieren. Unten ist mir vereinfachte dockerfile, die die MxNet zu bauen und zu installieren versucht:Eine App dockern, die das mxnet-Paket in R verwendet

FROM r-base:latest 


RUN apt-get update && apt-get install -y \ 
sudo \ 
gdebi-core \ 
pandoc \ 
pandoc-citeproc \ 
libcurl4-gnutls-dev \ 
libcairo2-dev/unstable \ 
libxt-dev \ 
libssl-dev 

# Download and install shiny server 
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 

# Here comes the installation of other required packages: 
# ....... 



#*** Here comes the problamatic bit: building Installing mxnet 
RUN sudo apt-get update 
RUN sudo apt-get install -y build-essential git libatlas-base-dev libopencv-dev 

RUN git clone --recursive https://github.com/dmlc/mxnet 
RUN cd mxnet; make -j$(nproc) 

RUN Rscript -e "install.packages('devtools', repo = 'https://cran.rstudio.com')" 

RUN cd R-package 

RUN Rscript -e "library('devtools'); library('methods'); options(repos=c(CRAN='https://cran.rstudio.com')); install_deps(dependencies = TRUE)" 


RUN cd .. 

RUN make rpkg 


COPY shiny-server.conf /etc/shiny-server/shiny-server.conf 
COPY /myapp/* /srv/shiny-server/ 

EXPOSE 80 

COPY shiny-server.sh /usr/bin/shiny-server.sh 

CMD ["/usr/bin/shiny-server.sh"] 

Danach läuft, erhalte ich eine Fehlermeldung, dass:

can not cd to R-Package 

Jede Hilfe?

Antwort

1

Versuchen mit

RUN cd mxnet; make -j$(nproc)\ && Rscript -e "install.packages('devtools', repo = 'https://cran.rstudio.com')"

Ihre RUN cd .. nicht tun, was Sie erwarten, es ist das gleiche wie das Öffnen einer Klemme ist, tut cd abc/def und in einem anderen Terminal, das in/home/$ USER, tun cd .., Sie werden nicht in abc sein.

Sie sollten Gruppe Ihre RUN-Befehle, um die Anzahl der Schichten in Ihrem Bild zu begrenzen, siehe

https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/

Überprüfen Sie auch die WORKDIR-Direktive in einer Dockerfile

https://docs.docker.com/engine/reference/builder/#workdir

Sie kann prüfen, was korrekt getan wurde (oder nicht), indem Sie eine Shell starten

docker run -it your_image /bin/bash

und dann prüfen, was vorhanden ist oder nicht.

+0

Der zweite Teil Ihrer Antwort war sehr hilfreich. Ich habe es geschafft, es zu bauen, als ich das "WORKDIR" verwendete, aber das Verbinden der zwei Laufbefehle war nicht wirklich das Problem. Du kannst deine Antwort entsprechend ändern, damit ich dir Danke sagen und akzeptieren kann;) – owise

Verwandte Themen