Невозможно подключиться к Jupyter Notebook, обслуживаемому Docker

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

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 Notebook. Если я подключаюсь к контейнеру через: 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 build 1200.


person Lorena Nicole    schedule 27.09.2016    source источник


Ответы (1)


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

РЕДАКТИРОВАТЬ: есть также дополнительная информация об этом в документации jupyter < / а>. Плюс пример, который они предоставляют в этой документации:

# 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"]
person joelnb    schedule 27.09.2016