Lor*_*ole 4 bash docker jupyter-notebook docker-for-mac
我一直在学习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
Run Code Online (Sandbox Code Playgroud)
该start.sh
文件看起来像这样:
#! /bin/sh
echo 'starting'
nohup jupyter notebook --no-browser > /home/docker/output.txt
Run Code Online (Sandbox Code Playgroud)
然后我:
docker build --rm -t 'test' .
docker run -d -ti -p 8888:8888 test
Run Code Online (Sandbox Code Playgroud)
从这一点来说,我认为我应该能够导航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 for Mac版本1.12.1-beta26.1 build 1200.
你的问题是jupyter默认只监听loopback接口.您可以通过运行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"]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1496 次 |
最近记录: |