1
votes

Docker - impossible d'exécuter le notebook Jupyter - KeyError: 'allow_remote_access'

C'est la première fois que j'utilise Docker. J'essaye d'installer jupyter et d'exécuter un fichier ipynb. J'ai essayé 2 images et j'ai rencontré la même erreur sur les deux:
1) python: 3.6.2-slim
2) jupyter / datascience-notebook

Dockerfile:

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

Build:

c.NotebookApp.ip = ‘0.0.0.0’

Exécuter:

#c.NotebookApp.ip = ‘*’

J'obtiens l'erreur suivante:

jupyter notebook --generate-config

Je pense qu'une solution potentielle à ce problème consiste à mettre à jour le fichier jupyter_notebook_config.py. Je dois donc générer le fichier en utilisant:

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

Je dois décommenter

docker run -p 9999:8888 helloworld_container 

et le définir sur: p>

docker build -t helloworld_container .

Je sais comment effectuer ces étapes sur ma machine mais je ne sais pas comment effectuer ces étapes sur l'image. J'ai donc généré le fichier de configuration sur ma machine, effectué les modifications puis l'ai copié dans le conteneur en ajoutant la ligne suivante au dockerfile (et en créant un nouveau conteneur):

#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"]

Cela n'a pas résolu le problème.

Pour l'instant, je suis passé à une autre image (tensorflow \ tensorflow) sur laquelle jupyter est installé mais je veux savoir ce que je fais de mal.


1 commentaires

J'ai ajouté une réponse à votre question.


3 Réponses :


1
votes

Au hasard, cette ligne, en particulier, le "--ip = '*'" est le problème:

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

Je ne sais pas comment Les fichiers docker gèrent les échappements, mais l'erreur indique que l'adresse IP est en quelque sorte erronée:

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

Essayez plutôt ceci, et encore moins les problèmes d'échappement:

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


0 commentaires

0
votes

Vous avez déjà identifié le problème vous-même dans la mesure où vous avez remarqué que vous deviez remplacer * par 0.0.0.0 . Mais au lieu de faire cela dans la configuration, vous pouvez simplement le faire dans votre commande (pas besoin d'utiliser bash):

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

Il s'agit d'un problème qui a été introduit par un bogue dans le notebook et également signalé dans docker-stacks .


0 commentaires

0
votes

Je voulais exécuter des blocs-notes Jupyter à l'aide de Docker et j'ai rencontré le même problème que vous avez signalé. Heureusement, j'ai pu trouver une solution.

Remarque: J'utilise le continuumio / anaconda3 image.

Étapes

  1. Extraire l'image de Docker Hub
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"
  1. Exécutez la commande suivante (celle fournie avec l'image de la documentation ne fonctionne pas et génère l'erreur que vous avez signalée)
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"

Il y a deux modifications cruciales pour que cela fonctionne. D'abord , utilisez --ip = '0.0.0.0 ' au lieu de --ip =' * '. Ensuite, ajoutez --allow-root pour voir les notebooks en cours d'exécution dans le navigateur.

Ajout d'un volume dans un conteneur temporel

Si vous souhaitez créer un conteneur temporel, c'est-à-dire qui est supprimé une fois qu'il cesse de fonctionner, et que vous souhaitez créer un volume afin de pouvoir conserver, dans votre hôte, les fichiers que vous avez créés à l'intérieur du conteneur, utilisez la commande suivante:

XXX


0 commentaires