Блестящее приложение недоступно, когда контейнер Singularity запущен как экземпляр - PullRequest
0 голосов
/ 23 мая 2019

Я построил контейнер особенностей из образа докера kfoltynski/shinyproxy-demo:singularity. Когда я бегу

singularity run shiny.simg 3839

блестящее приложение доступно на localhost:3839, но после запуска контейнера Singularity, как экземпляр

singularity instance start shiny.simg shiny 3839

это не так. Почему?

Шаги для воспроизведения:

Dockerfile

FROM openanalytics/r-base

MAINTAINER Tobias Verbeke "Tazovsky"

RUN apt-get update && apt-get install -y \
    sudo \
    pandoc \
    pandoc-citeproc \
    libcurl4-gnutls-dev \
    libcairo2-dev \
    libxt-dev \
    libssl-dev \
    libssh2-1-dev \
    libssl1.0.0

# packages needed for basic shiny functionality
RUN R -e "install.packages(c('shiny', 'rmarkdown'), repos='https://cloud.r-project.org')"

# install shinyproxy package with demo shiny application
COPY shinyproxy /shinyproxy
RUN R CMD INSTALL /shinyproxy
RUN rm /shinyproxy

# set host and port
COPY Rprofile.site /usr/lib/R/etc/

EXPOSE 3838

ENV PORT=3839

CMD ["R", "-e", "shinyproxy::run_01_hello(as.numeric(Sys.getenv(\"PORT\")))"]

Singularity def / файл рецепта Singularity.recipe:

Bootstrap: docker

From: kfoltynski/shinyproxy-demo:singularity

%environment

    export PORT=3839

%runscript

    echo "Running Shiny app on port $*"

    exec R -e "shinyproxy::run_01_hello($@)"

Построить единичное изображение shiny.simg:

 sudo singularity build shiny.simg Singularity.recipe

Запустить контейнер:

singularity run shiny.simg 3839 # app is available on port 3839

Запустить контейнер как экземпляр:

singularity instance start shiny.simg shiny 3839 # app is not available on port 3839

Почему приложение не доступно при запуске контейнера Singularity в качестве экземпляра?

1 Ответ

0 голосов
/ 29 мая 2019

singularity instance start shiny.simg shiny 3839 создает и запускает новый экземпляр с именем 3839, а не передает его в качестве параметра в %runscript.Чтобы получить требуемый ответ, вам нужно выполнить:

singularity instance start shiny.simg shiny_instance
singularity run instance://shiny_instance 3839

Блок %runscript не вызывается при запуске экземпляра.Если вы хотите, чтобы процесс запускался при запуске экземпляра, вам нужно использовать директиву %startscript, , показанную в документации здесь .

например,

Bootstrap: docker

From: kfoltynski/shinyproxy-demo:singularity

%environment
    export PORT=3839

%runscript
    echo "Running Shiny app on port $*"
    exec R -e "shinyproxy::run_01_hello($@)"

%startscript
    exec R -e "shinyproxy::run_01_hello($@)"
...