Докер - не удалось запустить блокнот Jupyter - KeyError: allow_remote_access - PullRequest
0 голосов
/ 07 января 2019

Я впервые использую Docker. Я пытаюсь установить jupyter и запустить файл ipynb. Я попробовал 2 изображения и столкнулся с той же ошибкой на обоих:
1) питон: 3.6.2-тонкий
2) jupyter / datascience-notebook

Dockerfile:

#Use this python image
FROM python:3.6.2-slim
#Set metadata
LABEL maintainer="MyName"
#Set working directory to /app
WORKDIR /app
#Copy all files  in current directory to working directory (/app)
COPY . /app
#Install the required libraries
RUN pip --no-cache-dir install numpy pandas seaborn sklearn jupyter
#Make port 8888 available to the world outside this Container
EXPOSE 8888
#Run jupyter when container launches
CMD ["jupyter","notebook","--ip='*'","--port=8888","--no-browser","--allow-root"]

Сложение:

docker build -t helloworld_container .

Пробег:

docker run -p 9999:8888 helloworld_container 

Я получаю следующую ошибку:

Traceback (most recent call last):
  File "/opt/conda/lib/python3.6/site-packages/traitlets/traitlets.py", line 528, in get
    value = obj._trait_values[self.name]
KeyError: 'allow_remote_access'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/conda/lib/python3.6/site-packages/notebook/notebookapp.py", line 869, in _default_allow_remote
    addr = ipaddress.ip_address(self.ip)
  File "/opt/conda/lib/python3.6/ipaddress.py", line 54, in ip_address
    address)
ValueError: '' does not appear to be an IPv4 or IPv6 address

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/conda/bin/jupyter-notebook", line 11, in <module>
    sys.exit(main())
  File "/opt/conda/lib/python3.6/site-packages/jupyter_core/application.py", line 266, in launch_instance
    return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)
  File "/opt/conda/lib/python3.6/site-packages/traitlets/config/application.py", line 657, in launch_instance
    app.initialize(argv)
  File "<decorator-gen-7>", line 2, in initialize
  File "/opt/conda/lib/python3.6/site-packages/traitlets/config/application.py", line 87, in catch_config_error
    return method(app, *args, **kwargs)
  File "/opt/conda/lib/python3.6/site-packages/notebook/notebookapp.py", line 1629, in initialize
    self.init_webapp()
  File "/opt/conda/lib/python3.6/site-packages/notebook/notebookapp.py", line 1379, in init_webapp
    self.jinja_environment_options,
  File "/opt/conda/lib/python3.6/site-packages/notebook/notebookapp.py", line 158, in __init__
    default_url, settings_overrides, jinja_env_options)
  File "/opt/conda/lib/python3.6/site-packages/notebook/notebookapp.py", line 251, in init_settings
    allow_remote_access=jupyter_app.allow_remote_access,
  File "/opt/conda/lib/python3.6/site-packages/traitlets/traitlets.py", line 556, in __get__
    return self.get(obj, cls)
  File "/opt/conda/lib/python3.6/site-packages/traitlets/traitlets.py", line 535, in get
    value = self._validate(obj, dynamic_default())
  File "/opt/conda/lib/python3.6/site-packages/notebook/notebookapp.py", line 872, in _default_allow_remote
    for info in socket.getaddrinfo(self.ip, self.port, 0, socket.SOCK_STREAM):
  File "/opt/conda/lib/python3.6/socket.py", line 745, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

Я думаю, что потенциальное решение этой проблемы - обновить файл jupyter_notebook_config.py. Поэтому мне нужно сгенерировать файл, используя:

jupyter notebook --generate-config

Мне нужно раскомментировать

#c.NotebookApp.ip = ‘*’

и установите его на:

c.NotebookApp.ip = ‘0.0.0.0’

Я знаю, как выполнить эти шаги на моей машине, но я не знаю, как выполнить эти шаги на образе. Поэтому я сгенерировал файл конфигурации на своем компьютере, внес изменения и скопировал его в контейнер, добавив следующую строку в файл dockerfile (и создав новый контейнер):

COPY jupyter_notebook_config.py /config/location/jupyter_notebook_config.py

Это не решило проблему.

На данный момент я перешел на другое изображение (tenorflow \ tenorflow), на котором установлен jupyter, но я хочу знать, что я делаю не так.

Ответы [ 3 ]

0 голосов
/ 07 января 2019

Вы уже определили проблему самостоятельно, поскольку заметили, что вам пришлось заменить * на 0.0.0.0. Но вместо того, чтобы делать это в конфигурации, вы можете просто сделать это в своей команде (не нужно использовать bash):

CMD ["jupyter", "notebook", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root"]

Эта проблема возникла из-за ошибки в notebook , а также в docker-stacks .

0 голосов
/ 30 мая 2019

Я хотел запустить ноутбуки Jupyter с помощью Docker, и я столкнулся с той же проблемой, о которой вы сообщали. К счастью, мне удалось найти решение.

Примечание: Я использую continuumio/anaconda3 изображение.

Steps

  1. Извлечение изображения из Docker Hub
docker pull continuumio/anaconda3
  1. Запустите следующую команду (при условии, что образ документации не работает и генерирует ошибку, о которой вы сообщили)
docker run -i -t -p 8888:8888 continuumio/anaconda3 /bin/bash -c "/opt/conda/bin/conda install jupyter -y --quiet && mkdir /opt/notebooks && /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='0.0.0.0' --port=8888 --no-browser --allow-root"

Есть две решающие модификации, чтобы сделать эту работу. Сначала , используйте --ip='0.0.0.0' вместо --ip='*'. Во-вторых, добавьте --allow-root, чтобы увидеть записные книжки, запущенные в браузере.

Добавление тома во временный контейнер

Если вы хотите создать временный контейнер, т. Е. Тот, который удаляется после того, как он перестает работать, и вы хотите создать том, чтобы вы могли хранить на своем хосте файлы, которые вы создали внутри контейнера, используйте следующая команда:

docker run --volume /path/in/your/host/jupyter_notebooks:/opt/notebooks --rm -it -p 8888:8888 continuumio/anaconda3 /bin/bash -c "/opt/conda/bin/conda install jupyter -y --quiet && /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='0.0.0.0' --port=8888 --no-browser --allow-root"
0 голосов
/ 07 января 2019

По-видимому, эта строка, в частности, "--ip='*'", является проблемой:

CMD ["jupyter","notebook","--ip='*'","--port=8888","--no-browser","--allow-root"]

Я не уверен, как докер-файлы обрабатывают экранирование, но ошибка говорит о том, что IP-адрес как-то неверен:

ValueError: '' does not appear to be an IPv4 or IPv6 address

Попробуйте вместо этого, гораздо реже избегайте проблем:

CMD["/bin/bash", "-lc", "jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser --allow-root"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...