kopia lustrzana https://github.com/jupyterhub/repo2docker
Provide a flag to pass environment variables at runtime
rodzic
ed6b483e2f
commit
5f95a5ddd3
|
@ -297,6 +297,14 @@ class Repo2Docker(Application):
|
||||||
help='Username of the primary user in the image',
|
help='Username of the primary user in the image',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
argparser.add_argument(
|
||||||
|
'--env', '-e',
|
||||||
|
dest='environment',
|
||||||
|
nargs='+',
|
||||||
|
help='Environment variables to define at container run time',
|
||||||
|
default=[]
|
||||||
|
)
|
||||||
|
|
||||||
return argparser
|
return argparser
|
||||||
|
|
||||||
def json_excepthook(self, etype, evalue, traceback):
|
def json_excepthook(self, etype, evalue, traceback):
|
||||||
|
@ -389,6 +397,12 @@ class Repo2Docker(Application):
|
||||||
if args.build_memory_limit:
|
if args.build_memory_limit:
|
||||||
self.build_memory_limit = args.build_memory_limit
|
self.build_memory_limit = args.build_memory_limit
|
||||||
|
|
||||||
|
if args.environment and not self.run:
|
||||||
|
print("To specify environment variables, you also need to run the container")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
self.environment = args.environment
|
||||||
|
|
||||||
def push_image(self):
|
def push_image(self):
|
||||||
client = docker.APIClient(version='auto', **kwargs_from_env())
|
client = docker.APIClient(version='auto', **kwargs_from_env())
|
||||||
# Build a progress setup for each layer, and only emit per-layer
|
# Build a progress setup for each layer, and only emit per-layer
|
||||||
|
@ -442,7 +456,8 @@ class Repo2Docker(Application):
|
||||||
ports=ports,
|
ports=ports,
|
||||||
detach=True,
|
detach=True,
|
||||||
command=run_cmd,
|
command=run_cmd,
|
||||||
volumes=container_volumes
|
volumes=container_volumes,
|
||||||
|
environment=self.environment
|
||||||
)
|
)
|
||||||
while container.status == 'created':
|
while container.status == 'created':
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
|
|
|
@ -118,4 +118,14 @@ def test_volume_no_run_fail():
|
||||||
builddir = os.path.dirname(__file__)
|
builddir = os.path.dirname(__file__)
|
||||||
args_list = ['--no-run', '-v', '/data:/data']
|
args_list = ['--no-run', '-v', '/data:/data']
|
||||||
|
|
||||||
assert not validate_arguments(builddir, args_list, 'To Mount volumes with -v, you also need to run the container')
|
assert not validate_arguments(builddir, args_list, 'To Mount volumes with -v, you also need to run the container')
|
||||||
|
|
||||||
|
def test_env_no_run_fail():
|
||||||
|
"""
|
||||||
|
Test to check if repo2docker fails when both --no-run and -e arguments are given
|
||||||
|
"""
|
||||||
|
builddir = os.path.dirname(__file__)
|
||||||
|
args_list = ['--no-run', '-e', 'FOO=bar', '--']
|
||||||
|
|
||||||
|
assert not validate_arguments(builddir, args_list, 'To specify environment variables, you also need to run the container')
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
"""
|
||||||
|
Test that volume mounts work when running
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import tempfile
|
||||||
|
import time
|
||||||
|
|
||||||
|
def test_env():
|
||||||
|
"""
|
||||||
|
Validate that you can define environment variables
|
||||||
|
"""
|
||||||
|
ts = str(time.time())
|
||||||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
username = os.getlogin()
|
||||||
|
subprocess.check_call([
|
||||||
|
'repo2docker',
|
||||||
|
'-v', '{}:/home/{}'.format(tmpdir, username),
|
||||||
|
'-e', 'FOO={}'.format(ts), 'BAR=baz',
|
||||||
|
'--',
|
||||||
|
tmpdir,
|
||||||
|
'/bin/bash',
|
||||||
|
'-c', 'echo -n $FOO > ts && echo -n $BAR > bar'
|
||||||
|
])
|
||||||
|
|
||||||
|
with open(os.path.join(tmpdir, 'ts')) as f:
|
||||||
|
assert f.read().strip() == ts
|
||||||
|
with open(os.path.join(tmpdir, 'bar')) as f:
|
||||||
|
assert f.read().strip() == 'baz'
|
||||||
|
|
Ładowanie…
Reference in New Issue