当我的dockerized闪亮应用程序不工作时如何查找错误日志

时间:2019-06-29 02:03:37

标签: r docker shiny shiny-server

我正在尝试将闪亮的应用程序放入Docker容器中。我的闪亮应用程序在本地计算机上可以正常运行。但是在对我闪亮的应用程序进行dockerize之后,我的本地主机上总是出现错误消息,如The application failed to start. The application exited during initialization.

我不知道为什么会这样。我是Docker的新手。运行docker映像时如何查找错误日志?我需要日志来知道出了什么问题。

这是我的停靠文件:

# Install R version 3.6
FROM r-base:3.6.0

# Install Ubuntu packages
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 ShinyServer (latest version)
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

# Install R packages that are required
# TODO: add further package if you need!
RUN R -e "install.packages(c( 'tidyverse', 'ggplot2','shiny','shinydashboard', 'DT', 'plotly', 'RColorBrewer'), repos='http://cran.rstudio.com/')"
# Copy configuration files into the Docker image
COPY shiny-server.conf  /etc/shiny-server/shiny-server.conf
COPY /app /srv/shiny-server/

# Make the ShinyApp available at port 80
EXPOSE 80

# Copy further configuration files into the Docker image
COPY shiny-server.sh /usr/bin/shiny-server.sh

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

我制作了图片并按照以下方式运行:

docker build -t myshinyapp .
docker run -p 80:80 myshinyapp

1 个答案:

答案 0 :(得分:3)

通常,只需使用以下命令即可找到任何(有效或无效)容器的日志:

docker logs full-container-name

docker logs CONTAINERID

(替换容器的实际ID)

如前所述,即使对于已停止(尚未删除)的容器,通常也可以正常工作,您可以使用以下命令列出该容器:

docker container ls -a

或者只是

docker ps -a

但是,有时您甚至根本没有日志,因为根本没有创建容器(根据经验,我认为它更适合您的情况)

之所以会发生,仅仅是因为docker引擎无法分配您的服务定义要求所有可用的资源。

  

应用程序无法启动。应用程序在初始化期间退出

通常反映出您的docker引擎无法获取所需的资源。

最常见的情况就是主机端口

如果您有另一个服务(例如是否使用docker化)使用(例如)您要用于该服务的端口(在您的情况下为端口80),那么Doc​​ker将无法启动您的容器。

所以……简而言之……针对这种情况的最简单解决方案(以及遇到此类问题时的首次尝试)只是绑定主机上的任何其他端口(例如:8080) ,到您的服务将在内部(容器内部)监听的80端口:

docker run -p 8080:80 myshinyapp

同一原则适用于不可分配卷(例如:尝试将卷绑定为主机中实际上不存在的只读卷)


作为旁注/技巧:

由于您没有为容器设置名称,因此在查找其日志时将需要使用容器ID。

但是您不必输入(或复制粘贴)完整的容器ID(通常是1283c66babea或更大的值),而只需输入一些前几位数字,它仍然可以按预期运行:

docker logs 1283c6docker logs 1283甚至docker logs 128

(当然...,只要您没有其他128 *****容器)