Как найти журналы ошибок, когда мое приложение dockerized блестящее не работает - PullRequest
1 голос
/ 29 июня 2019

Я пытаюсь положить свое блестящее приложение в докер-контейнер. Мое блестящее приложение прекрасно работает на моем локальном компьютере. Но после Dockerize моего блестящего приложения, у меня всегда есть сообщение об ошибке на моем локальном хосте как The application failed to start. The application exited during initialization..

Понятия не имею, почему это происходит. Я новичок в докере. Как я могу найти журналы ошибок при запуске образа докера? Мне нужен журнал, чтобы знать, что идет не так.

Вот мой док-файл:

# 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 Ответ

3 голосов
/ 29 июня 2019

Обычно журналы для любого (живого или мертвого) контейнера можно найти, просто используя:

docker logs full-container-name

или

docker logs CONTAINERID

(заменяя фактический идентификатор вашего контейнера)

Как уже говорилось, это обычно работает также и для остановленных (но не удаленных) контейнеров, которые можно перечислить с помощью:

docker container ls -a

или просто

docker ps -a

Однако иногда у вас даже не будет журнала, поскольку контейнер вообще никогда не создавался (что, по моему опыту, больше подходит для вашего случая)

И это может происходить просто потому, чтомеханизм докера не может выделить все ресурсы, которые требуются для определения вашей службы.

Не удалось запустить приложение.Приложение, завершившееся во время инициализации

, обычно отражает то, что ваш механизм докера не может получить требуемые ресурсы.

И наиболее распространенный случай для этого такой же простой, как ваш хост-порты :

Если у вас есть другая служба (докеризируемая или нет), использующая (например) тот порт, который вы хотите использовать для своей услуги (в вашем случае, порт 80), то Dockerпросто не сможет запустить ваш контейнер.

Итак ... короче ... самое простое решение для этой ситуации (и ваша первая попытка, когда вы сталкиваетесь с подобными проблемами), это просто связать любой другой портот вашего хоста (скажем: 8080) до того 80 порта, который ваша служба будет прослушивать внутренне (внутри вашего контейнера):

docker run -p 8080:80 myshinyapp

Тот же принцип применяется к невыбираемым томов (например: попытка связать том только для чтения, который на самом деле не существует на хосте)


В качестве комментария / уловки:

Поскольку выне задаешь намНапример, для вашего контейнера вам нужно будет использовать идентификатор контейнера при поиске его логов.

Но вместо того, чтобы вводить (или вставлять копию) полный идентификатор контейнера (обычно что-то вроде: 1283c66babea или даже больше), вы можете просто ввести несколько первых цифр вместо этого, и он все равно будет работать как положено:

docker logs 1283c6 или docker logs 1283 или даже docker logs 128

(конечно ... до тех пор, пока у вас нет другого 128 ***** контейнера)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...