From 9a806c74ae562acf6cafceb6f259234584e84e13 Mon Sep 17 00:00:00 2001 From: Ali Mirlou Date: Sat, 6 Jun 2020 21:51:01 +0430 Subject: [PATCH 1/5] Add command variable to Jinja Dockerfile template and corresponding method in BuildPack class --- repo2docker/buildpacks/base.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/repo2docker/buildpacks/base.py b/repo2docker/buildpacks/base.py index e3a570f01..45cb1a190 100644 --- a/repo2docker/buildpacks/base.py +++ b/repo2docker/buildpacks/base.py @@ -191,7 +191,7 @@ ENTRYPOINT ["/usr/local/bin/repo2docker-entrypoint"] # Specify the default command to run -CMD ["jupyter", "notebook", "--ip", "0.0.0.0"] +CMD [{% for c in command -%} "{{ c }}"{{ "," if not loop.last }} {% endfor -%}] {% if appendix -%} # Appendix: @@ -482,6 +482,14 @@ def get_start_script(self): """ return None + def get_command(self): + """ + The default command to be run by docker. + + This should return a list of strings to be used as Dockerfile `CMD`. + """ + return ["jupyter", "notebook", "--ip", "0.0.0.0"] + @property def binder_dir(self): has_binder = os.path.isdir("binder") @@ -568,6 +576,7 @@ def render(self): base_packages=sorted(self.get_base_packages()), post_build_scripts=self.get_post_build_scripts(), start_script=self.get_start_script(), + command=self.get_command(), appendix=self.appendix, ) From e21086ee863742fe68de45bc7be3fd978e10f9e2 Mon Sep 17 00:00:00 2001 From: Ali Mirlou Date: Mon, 15 Jun 2020 20:07:52 +0430 Subject: [PATCH 2/5] Fix whitespaces --- repo2docker/buildpacks/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo2docker/buildpacks/base.py b/repo2docker/buildpacks/base.py index 45cb1a190..2ddf292ee 100644 --- a/repo2docker/buildpacks/base.py +++ b/repo2docker/buildpacks/base.py @@ -191,7 +191,7 @@ ENTRYPOINT ["/usr/local/bin/repo2docker-entrypoint"] # Specify the default command to run -CMD [{% for c in command -%} "{{ c }}"{{ "," if not loop.last }} {% endfor -%}] +CMD [{% for c in command -%} "{{ c }}"{{ ", " if not loop.last }}{% endfor -%}] {% if appendix -%} # Appendix: From f0a3fb062d4a97b7913032367cf676be88dd5efb Mon Sep 17 00:00:00 2001 From: Ali Mirlou Date: Fri, 24 Jul 2020 23:56:08 +0430 Subject: [PATCH 3/5] Add handling of CMD shell form --- repo2docker/buildpacks/base.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/repo2docker/buildpacks/base.py b/repo2docker/buildpacks/base.py index 2ddf292ee..077e756c2 100644 --- a/repo2docker/buildpacks/base.py +++ b/repo2docker/buildpacks/base.py @@ -10,6 +10,7 @@ import hashlib import escapism import xml.etree.ElementTree as ET +from collections.abc import Iterable from traitlets import Dict @@ -191,7 +192,7 @@ ENTRYPOINT ["/usr/local/bin/repo2docker-entrypoint"] # Specify the default command to run -CMD [{% for c in command -%} "{{ c }}"{{ ", " if not loop.last }}{% endfor -%}] +CMD {{ command }} {% if appendix -%} # Appendix: @@ -562,6 +563,17 @@ def render(self): for k, v in self.get_build_script_files().items() } + # If get_command returns a list or a tuple, it will be stringified (exec form). + # If it returns a string, it will be used as is (shell form). + cmd = self.get_command() + if isinstance(cmd, tuple): + cmd = list(cmd) + if isinstance(cmd, list): + cmd = str(cmd).replace("'", '"') + if not isinstance(cmd, str): + raise ValueError( + 'Method "get_command" of buildpack "%s" must return a string, a list or a tuple.' % self.__class__.__name__) + return t.render( packages=sorted(self.get_packages()), path=self.get_path(), @@ -576,7 +588,7 @@ def render(self): base_packages=sorted(self.get_base_packages()), post_build_scripts=self.get_post_build_scripts(), start_script=self.get_start_script(), - command=self.get_command(), + command=cmd, appendix=self.appendix, ) From f7ec92ead52909f8e2be3712190dbe5819995772 Mon Sep 17 00:00:00 2001 From: Ali Mirlou Date: Sun, 13 Sep 2020 02:27:51 +0430 Subject: [PATCH 4/5] Remove redundant import --- repo2docker/buildpacks/base.py | 1 - 1 file changed, 1 deletion(-) diff --git a/repo2docker/buildpacks/base.py b/repo2docker/buildpacks/base.py index 077e756c2..e60021d23 100644 --- a/repo2docker/buildpacks/base.py +++ b/repo2docker/buildpacks/base.py @@ -10,7 +10,6 @@ import hashlib import escapism import xml.etree.ElementTree as ET -from collections.abc import Iterable from traitlets import Dict From 4ff3a78721a2cf2a566e8ad2f6a68be8b6c51b5b Mon Sep 17 00:00:00 2001 From: Ali Mirlou Date: Sun, 13 Sep 2020 14:13:51 +0000 Subject: [PATCH 5/5] Lint files --- repo2docker/buildpacks/base.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/repo2docker/buildpacks/base.py b/repo2docker/buildpacks/base.py index e60021d23..eb202c8cb 100644 --- a/repo2docker/buildpacks/base.py +++ b/repo2docker/buildpacks/base.py @@ -571,7 +571,9 @@ def render(self): cmd = str(cmd).replace("'", '"') if not isinstance(cmd, str): raise ValueError( - 'Method "get_command" of buildpack "%s" must return a string, a list or a tuple.' % self.__class__.__name__) + 'Method "get_command" of buildpack "%s" must return a string, a list or a tuple.' + % self.__class__.__name__ + ) return t.render( packages=sorted(self.get_packages()),