我正在尝试将闪亮的应用程序放入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
答案 0 :(得分:3)
通常,只需使用以下命令即可找到任何(有效或无效)容器的日志:
docker logs full-container-name
或
docker logs CONTAINERID
(替换容器的实际ID)
如前所述,即使对于已停止(尚未删除)的容器,通常也可以正常工作,您可以使用以下命令列出该容器:
docker container ls -a
或者只是
docker ps -a
但是,有时您甚至根本没有日志,因为根本没有创建容器(根据经验,我认为它更适合您的情况)
之所以会发生,仅仅是因为docker引擎无法分配您的服务定义要求所有可用的资源。
应用程序无法启动。应用程序在初始化期间退出
通常反映出您的docker引擎无法获取所需的资源。
最常见的情况就是主机端口:
如果您有另一个服务(例如是否使用docker化)使用(例如)您要用于该服务的端口(在您的情况下为端口80),那么Docker将无法启动您的容器。
所以……简而言之……针对这种情况的最简单解决方案(以及遇到此类问题时的首次尝试)只是绑定主机上的任何其他端口(例如:8080
) ,到您的服务将在内部(容器内部)监听的80端口:
docker run -p 8080:80 myshinyapp
同一原则适用于不可分配卷(例如:尝试将卷绑定为主机中实际上不存在的只读卷)
作为旁注/技巧:
由于您没有为容器设置名称,因此在查找其日志时将需要使用容器ID。
但是您不必输入(或复制粘贴)完整的容器ID(通常是1283c66babea
或更大的值),而只需输入一些前几位数字,它仍然可以按预期运行:
docker logs 1283c6
或docker logs 1283
甚至docker logs 128
(当然...,只要您没有其他128 *****容器)