2017-07-27 6 views
1

L'exécution gl.canvas.set_target('ipynb') se produit après l'exeption dans le conteneur docker.tornade/graphlab Impossible d'affecter l'adresse demandée au docker

Même avec gl.canvas.set_target('ipynb', port=28892) où 28892 est un port ouvert, l'erreur reste la même.

--------------------------------------------------------------------------- 
error          Traceback (most recent call last) 
<ipython-input-257-3f215a521352> in <module>() 
----> 1 gl.canvas.set_target('ipynb') 

/opt/conda/envs/gl-env/lib/python2.7/site-packages/graphlab/canvas/utils.pyc in set_target(target, port) 
    102    # and to preserve backwards compatibility/other use cases 
    103    # (running a notebook exported to .py, for instance) 
--> 104   _active_target = targets[target]() 
    105 
    106  # track metrics on target 

/opt/conda/envs/gl-env/lib/python2.7/site-packages/graphlab/canvas/target.pyc in __init__(self, port) 
    25   self.state = graphlab.canvas.state.State() 
    26   # TODO server is not necessary in static IPython/Jupyter Notebook 
---> 27   self.server = graphlab.canvas.server.Server(self.state, port) 
    28   # add data objects to left nav 
    29   DataView = graphlab.canvas.views.data_objects.DataObjectsView() 

/opt/conda/envs/gl-env/lib/python2.7/site-packages/graphlab/canvas/server.pyc in __init__(self, state, port) 
    44 
    45   #Will raise exception if port cannot be bound 
---> 46   self.__bind_socket(port) 
    47 
    48  # methods 

/opt/conda/envs/gl-env/lib/python2.7/site-packages/graphlab/canvas/server.pyc in __bind_socket(self, port) 
    93  # Raises exception if socket cannot be bound on requested port 
    94  def __bind_socket(self, port=None): 
---> 95   sockets = tornado.netutil.bind_sockets(port,"localhost") 
    96   self.__server.add_sockets(sockets) 
    97   with self.__port_lock: 

/opt/conda/envs/gl-env/lib/python2.7/site-packages/tornado/netutil.pyc in bind_sockets(port, address, family, backlog, flags, reuse_port) 
    194 
    195   sock.setblocking(0) 
--> 196   sock.bind(sockaddr) 
    197   bound_port = sock.getsockname()[1] 
    198   sock.listen(backlog) 

/opt/conda/envs/gl-env/lib/python2.7/socket.pyc in meth(name, self, *args) 
    226 
    227 def meth(name,self,*args): 
--> 228  return getattr(self._sock,name)(*args) 
    229 
    230 for _m in _socketmethods: 

error: [Errno 99] Cannot assign requested address 

Il ressemble à plus d'un problème docker/tornade que problème graphlab, parce que dans la machine hôte les mêmes œuvres de commande.

j'ai commencé mon conteneur docker en utilisant la commande suivante:

sudo docker run -it -v /path/to/data:/root/data \ 
    -v ~/code/work/src:/root/src \ 
    -p 8888:8888 -p 28892:28892 company/graphlab \ 
    /bin/bash -c "source activate gl-env && jupyter notebook --notebook-dir=~/src --ip='*' --port=8888 --no-browser" 

Est-il possible de comprendre ce port afin que je puisse l'ouvrir ou de tout autre moyen de résoudre ce problème?

Répondre

2

L'édition de votre fichier/etc/hosts (à l'intérieur du conteneur) pour ne contenir qu'une valeur d'adresse IP pour localhost résout le problème pour moi. Cela ne fonctionne que si vous l'éditez sur le conteneur en cours d'exécution. L'éditer lors de la construction de l'image ne résout pas le problème.

Au démarrage du conteneur/etc/hosts ont les lignes:

127.0.0.1 localhost 
::1 localhost ip6-localhost ip6-loopback 

je devais changer ceux:

127.0.0.1 localhost 
::1 ip6-localhost ip6-loopback