Run Jupyter Notebook in the Background on Docker
Solution 1
I got it to work using the setup from:
https://github.com/jupyter/docker-stacks/tree/master/minimal-notebook
the trick was to install tini and put the following code into a start-notebook.sh script:
#!/bin/bash
exec jupyter notebook &> /dev/null &
this is than added to the path with:
COPY start-notebook.sh /usr/local/bin/
and
RUN chmod +x /usr/local/bin/start-notebook.sh
Then I could set CMD ["start-notebook.sh"]
to start up the container with jupyter running in the background on start.
Solution 2
You can do that, executing the below command
jupyter notebook --allow-root &> /dev/null &
You might see the warning that jupyter command needs --allow-root
option if you execute jupyter notebook
command as a root in a docker container.
MrLoh
Updated on July 25, 2022Comments
-
MrLoh almost 2 years
I am trying to run a jupyter notebook in the background without printing anything to the console. I found this solution in a question for bash:
jupyter notebook &> /dev/null &
But I am running jupyter in a docker container and want it to start in the background via
CMD
. How can I do the same in sh?-
Ivan over 8 yearsSo far I don't know a way and the docs don't see to indicate that is possible by default. Your solution should work, though, adding this line on the CMD line in Docker.
-
MrLoh over 8 yearsthanks @Ivan the problem is that docker runs CMD commands in sh, not in bash and it doesn't seem to have the same effect in sh.
-
-
Nick over 7 yearsCan you explain what does the
&> /dev/null &
do? especially the two&
symbols? -
MrLoh over 7 yearsIt ensures that the logs are not printed to
stdout
but redirected intodev/null
and that the terminal doesn't get blocked with Jupiter but that jupyter is just fired off as a background process. Just try it out. -
michael over 7 yearsthe
&>
is a newer bash-ism, "functional as of Bash 4" as per the docs, which redirects both stderr and stdout. Alternatively, and more traditionally:jupyter notebook > /dev/null 2>&1
, or, preferably,jupyter notebook >> /path/to/logfile.log 2>&1
(the last, trailing&
just runs the entire command in the background).