How can I get a golem app to generate logs when dockerized?

225 views Asked by At

We have a dockerized golem app that runs fine except for not creating any output (log statements) when deployed in a docker container. In fact, we aren't even seeing any default shiny-server logs.

Here is app.R for our "AirSensorDataViewer" golem app:

pkgload::load_all(export_all = FALSE, helpers = FALSE, attach_testthat = FALSE)
options( 
  golem.app.prod = TRUE, 
  shiny.port = 3838,
  shiny.host = '0.0.0.0'
)
AirSensorDataViewer::run_app()

And here is our Dockerfile (that builds on top of of a base image with all necessary packages):

FROM mazamascience/airsensor-dataviewer-base:1.0.1

# Create the build zone, copy the local directory over to the docker image, build and install R package.
RUN mkdir /build_zone
ADD . /build_zone
WORKDIR /build_zone
RUN R -e 'remotes::install_local(upgrade="never")'

# Remove sample apps
RUN rm -rf /srv/shiny-server/

# copy app to image
COPY . /srv/shiny-server/asdv

# add .conf file to image/container to preserve log file
COPY ./shiny-server.conf  /etc/shiny-server/shiny-server.conf

# When run image and create a container, this container will listen on port 3838
EXPOSE 3838

# Avoiding running as root --> run container as user 'shiny' instead
# allow permission
RUN sudo chown -R shiny:shiny /srv/shiny-server
RUN chmod -R 755 /srv/shiny-server/asdv

# execute in the following as user --> imortant to give permission before that step
USER shiny

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

And, lastly, our shiny-server.conf file:

# Instruct Shiny Server to run applications as the user "shiny"
run_as shiny;

# Define a server that listens on port 3838
server {
  listen 3838;

  # Define a location at the base URL
  location /asdv/test/ {

    # Host the directory of Shiny Apps stored in this directory
    site_dir /srv/shiny-server/asdv;

    # Log all Shiny output to files in this directory
    log_dir /var/log/shiny-server;

    # When a user visits the base URL rather than a particular application,
    # an index of the applications available in this directory will be shown.
    directory_index on;
  }

}

Has anyone had success getting a dockerized golem app to create/write to files inside the docker container?

1

There are 1 answers

0
Jonathan Callahan On

I hope the posted question might be helpful for those wanting to do this as it turns out everything works fine.

For the last few hours I was mistakenly typing docker run ... when I wanted to check the container log files. This creates a new container.

Instead, log files are indeed found in /var/log/shiny-server/ when I:

docker exec -ti airsensor-dataviewer-desktop /bin/bash
ls /var/log/shiny-server/