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

zes*_*sla 4 r shiny docker shiny-server

我正在尝试将我闪亮的应用程序放入 docker 容器中。我闪亮的应用程序在我的本地计算机上运行良好。但是在 dockerize 我闪亮的应用程序之后,我的本地主机上总是有错误消息,例如The application failed to start. The application exited during initialization..

我不知道为什么会这样。我是码头工人的新手。运行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"]
Run Code Online (Sandbox Code Playgroud)

我构建了图像并运行如下:

docker build -t myshinyapp .
docker run -p 80:80 myshinyapp
Run Code Online (Sandbox Code Playgroud)

Sal*_*Ops 6

通常,只需使用以下命令即可找到任何(活动或死亡)容器的日志:

docker logs full-container-name
Run Code Online (Sandbox Code Playgroud)

或者

docker logs CONTAINERID
Run Code Online (Sandbox Code Playgroud)

(替换容器的实际 ID)

如前所述,这通常也适用于已停止(尚未删除)的容器,您可以将其列出:

docker container ls -a
Run Code Online (Sandbox Code Playgroud)

要不就

docker ps -a
Run Code Online (Sandbox Code Playgroud)

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

这可能只是因为 docker 引擎无法分配您的服务定义需要可用的所有资源。

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

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

最常见的情况就是你的主机端口一样简单:

如果您有另一个服务(是否已被 dockerized)使用(例如)您想用于服务的端口(在您的情况下为端口 80),那么 Docker 将无法启动您的容器。

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

docker run -p 8080:80 myshinyapp
Run Code Online (Sandbox Code Playgroud)

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


作为旁白评论/技巧:

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

但是,您无需输入(或复制粘贴)完整的容器 ID(通常类似于:1283c66babea或更大),您只需输入前几位数字,它仍然可以按预期工作:

docker logs 1283c6或者docker logs 1283甚至docker logs 128

(当然......只要你没有任何其他128*****容器)