Issue
I am running an ipcluster on a linux host. The setup is very similar to this SO question (https://stackoverflow.com/a/31479269/2146052).
I have the following adjustments to my ipcontroller_config.py
myip = '*'
c.HubFactory.engine_ip = myip
c.HubFactory.client_ip = myip
c.HubFactory.monitor_ip = myip
c.HubFactory.ip = myip
c.HubFactory.iopub = (10001, 10002)
c.HubFactory.control = (10003,10004)
c.HubFactory.task = (10005,10006)
c.HubFactory.mux = (10007,10008)
c.HubFactory.regport = 10009
c.HubFactory.hb = (10010,10011)
c.HubFactory.notifier_port = 10012
I start the docker container as
docker run -it --rm -p 10000-10012:10000-10012 <myimg> /bin/bash
ipcluster start -n4
The ipcluster starts ok but when I try to connect I get Hub connection timeout
. This error does not occur if I run the same configuration outside of docker. Do I need to make a further adjustment beyond the simple port forwarding?
Solution
Finally here is the missing piece:
When connecting from a different docker container one needs to specify location
inside the configuration:
c.IPControllerApp.location = '<name of service in docker-compose>'
This is documented under https://ipyparallel.readthedocs.io/en/latest/process.html#ports-and-addresses (see --location section for more information)
Also make sure that the two services are on the same docker network https://stackoverflow.com/a/38089080/2146052 and see https://docs.docker.com/compose/networking/
ipcontroller_config.py
should therefore look like this (if running parallel for the first time one needs to create the default config by running: ipython profile create --parallel --profile=myprofile
)
myip = '*'
c.HubFactory.engine_ip = myip
c.HubFactory.client_ip = myip
c.HubFactory.monitor_ip = myip
c.HubFactory.ip = myip
# c.IPControllerApp.location = '<name of service in docker-compose>'
c.IPControllerApp.location = 'ipyp'
c.HubFactory.iopub = (10001, 10002)
c.HubFactory.control = (10003,10004)
c.HubFactory.task = (10005,10006)
c.HubFactory.mux = (10007,10008)
c.HubFactory.regport = 10009
c.HubFactory.hb = (10010,10011)
c.HubFactory.notifier_port = 10012
Sample docker-compose.yml
setup
version: '3.3'
services:
ipyp:
image: "ipyp"
build: .
ports:
- "10000-10012:10000-10012"
command: ipcluster start -n2 --profile=myprofile
volumes:
- configdata:/root/.ipython/
restart: always
ipyp_test:
image: "ipyp"
build: .
ports:
- "9999:9999"
command: jupyter lab --allow-root --port 9999 --ip=0.0.0.0
volumes:
-configdata:/parallelconfig:ro
restart: always
volumes:
configdata:
Try out the setup by starting a notebook inside the ipyp_test service and running
import ipyparallel
fl = '/parallelconfig/profile_myprofile/security/ipcontroller-client.json'
rc = ipyparallel.Client(fl)
rc.ids
Answered By - bjonen
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.