5

私は、Docker を使用して Jupyter Notebook を提供および共有することを最終目標として、Docker を学習してきました。以下は 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 コンテナー内から curldocker exec -i -t container_id /bin/bashできることtail -f /home/docker/output.txtがわかります。同様にps auwx | grep 'jupyter'、Jupyter Notebook Web サーバーが実行されていることを確認します。

ポートをそのよう8888:8888にバインドEXPOSINGし、Dockerfile にバインドする以外に、何が欠けていますか? 接続するたびに、http://localhost:8888「localhost はデータを送信しませんでした」と表示されます。

Docker for Mac バージョン 1.12.1-beta26.1 ビルド 1200 を使用しています。

4

1 に答える 1

9

あなたの問題は、デフォルトで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"]
于 2016-09-27T20:59:15.423 に答える