2016-12-11 6 views
2

Я док-станцию ​​блестящего приложения, которое использует пакет «mxnet». После долгих усилий я пришел к выводу, что мне нужно собрать и установить пакет вместо обычной установки из репозитория dmlc. Ниже я упрощенный dockerfile, который пытается построить и установить mxnet:Докинг-приложение, использующее пакет mxnet в R

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"] 

После запуска этого я получаю ошибку говоря:

can not cd to R-Package 

Любой помощь?

ответ

1

Попробуйте с

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

ваш RUN cd .. не будет делать то, что вы ожидаете, это то же самое, как открытие терминала, делая cd abc/def и в другом терминале, который находится в/дома/$ USER, делая cd .., вы не будете в abc.

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

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

Проверьте также директиву Workdir в Dockerfile

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

Вы может проверить, что правильно сделано (или нет), запустив оболочку

docker run -it your_image /bin/bash

, а затем проверить, что имеется, или нет.

+0

Вторая часть вашего ответа была действительно полезна. Мне удалось создать его, когда я использовал «WORKDIR», но объединение двух команд запуска не было проблемой. Вы можете соответствующим образом изменить свой ответ, чтобы я мог поблагодарить вас и принять его;) – owise

Смежные вопросы