2016-09-27 4 views
3

Я изучаю Docker с конечной целью использования его для обслуживания и обмена ноутбуками Jupyter. Ниже приведен пример Dockerfile:Невозможно подключиться к ноутбуку Jupyter, обслуживаемому Docker

FROM python:2 
ENV PYTHONUNBUFFERRED 1 
RUN pip install jupyter 

RUN useradd --create-home --home-dir /home/docker --shell /bin/bash docker 
RUN adduser docker sudo 

ADD start.sh /home/docker/start.sh 
RUN chmod +x /home/docker/start.sh 
RUN chown docker /home/docker/start.sh 

ADD prod_sentiment.ipynb /home/docker/prod_sentiment.ipynb 
ADD output.txt /home/docker/output.txt 
RUN chmod +x /home/docker/output.txt 
RUN chown docker /home/docker/output.txt 

EXPOSE 8888 
RUN usermod -a -G sudo docker 
RUN echo "docker ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers 
USER docker 

ENV HOME=/home/docker 
ENV SHELL=/bin/bash 
ENV USER=docker 

RUN printenv 
CMD ./home/docker/start.sh 

Файл start.sh выглядит так:

#! /bin/sh 
echo 'starting' 
nohup jupyter notebook --no-browser > /home/docker/output.txt 

Я тогда:

docker build --rm -t 'test' . 
docker run -d -ti -p 8888:8888 test 

С этого момента, я полагаю, я должен иметь возможность перемещаться до localhost:8888 и посмотреть ноутбук Jupyter. Если я подключаюсь к контейнеру через: docker exec -i -t container_id /bin/bash, я могу tail -f /home/docker/output.txt видеть, что я могу скрутить его из контейнера Docker. Аналогично ps auwx | grep 'jupyter' подтверждает, что работает веб-сервер Jupyter Notebook.

Помимо привязки порта как такового 8888:8888 и EXPOSING он в файле Dockerfile, что мне не хватает? Когда я подключаюсь к http://localhost:8888, он говорит: «localhost не отправил никаких данных».

Я использую Docker для Mac версии 1.12.1-beta26.1 сборки 1200.

ответ

6

Ваш вопрос в том, что jupyter слушает только интерфейс обратной связи по умолчанию. Вы можете изменить это, запустив jupyter с опцией --ip=0.0.0.0, которая заставит его связываться на всех интерфейсах (внутри контейнера).

EDIT: есть также дополнительная информация об этом in the jupyter documentation. Плюс пример, который они предоставляют в этой документации:

# Add Tini. Tini operates as a process subreaper for jupyter. This prevents 
# kernel crashes. 
ENV TINI_VERSION v0.6.0 
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /usr/bin/tini 
RUN chmod +x /usr/bin/tini 
ENTRYPOINT ["/usr/bin/tini", "--"] 

EXPOSE 8888 
CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0"] 
+0

О, боже мой. Ха! Благодаря!!!! –