kopia lustrzana https://github.com/jupyterhub/repo2docker
Use same port in host and docker container
Makes it work on Linux and the default OS X install I thinkpull/10/head
rodzic
c7dae78a51
commit
cb11332c6f
|
@ -197,17 +197,17 @@ class Repo2Docker(Application):
|
||||||
|
|
||||||
def run_image(self):
|
def run_image(self):
|
||||||
client = docker.from_env(version='auto')
|
client = docker.from_env(version='auto')
|
||||||
|
port = self._get_free_port()
|
||||||
container = client.containers.run(
|
container = client.containers.run(
|
||||||
self.output_image_spec,
|
self.output_image_spec,
|
||||||
ports={'8888/tcp': None},
|
ports={'%s/tcp' % port: port},
|
||||||
detach=True
|
detach=True,
|
||||||
|
command=['jupyter', 'notebook', '--ip', '0.0.0.0', '--port', str(port)],
|
||||||
)
|
)
|
||||||
while container.status == 'created':
|
while container.status == 'created':
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
container.reload()
|
container.reload()
|
||||||
|
|
||||||
host_port = container.attrs['NetworkSettings']['Ports']['8888/tcp'][0]['HostPort']
|
|
||||||
self.log.info('Port 8888 mapped to port %s on the machine docker is running on', host_port, extra=dict(phase='running'))
|
|
||||||
try:
|
try:
|
||||||
for line in container.logs(stream=True):
|
for line in container.logs(stream=True):
|
||||||
self.log.info(line.decode('utf-8').rstrip(), extra=dict(phase='running'))
|
self.log.info(line.decode('utf-8').rstrip(), extra=dict(phase='running'))
|
||||||
|
@ -216,6 +216,17 @@ class Repo2Docker(Application):
|
||||||
container.kill()
|
container.kill()
|
||||||
container.remove()
|
container.remove()
|
||||||
|
|
||||||
|
def _get_free_port(self):
|
||||||
|
"""
|
||||||
|
Hacky method to get a free random port on local host
|
||||||
|
"""
|
||||||
|
import socket
|
||||||
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
s.bind(("",0))
|
||||||
|
port = s.getsockname()[1]
|
||||||
|
s.close()
|
||||||
|
return port
|
||||||
|
|
||||||
def image_exists(self):
|
def image_exists(self):
|
||||||
client = docker.from_env(version='auto')
|
client = docker.from_env(version='auto')
|
||||||
# HACK: Try to just pull this and see if that works.
|
# HACK: Try to just pull this and see if that works.
|
||||||
|
|
Ładowanie…
Reference in New Issue