diff --git a/repo2docker/app.py b/repo2docker/app.py index 5b553712..8a804905 100755 --- a/repo2docker/app.py +++ b/repo2docker/app.py @@ -605,12 +605,24 @@ class Repo2Docker(Application): try: for line in container.logs(stream=True): self.log.info(line.decode("utf-8"), extra=dict(phase="running")) + finally: container.reload() if container.status == "running": self.log.info("Stopping container...\n", extra=dict(phase="running")) container.kill() exit_code = container.attrs["State"]["ExitCode"] + + container.wait() + + self.log.info( + "Container finished running.\n".upper(), extra=dict(phase="running") + ) + # are there more logs? Let's send them back too + late_logs = container.logs().decode("utf-8") + for line in late_logs.split("\n"): + self.log.info(line + "\n", extra=dict(phase="running")) + container.remove() if exit_code: sys.exit(exit_code) diff --git a/repo2docker/buildpacks/repo2docker-entrypoint b/repo2docker/buildpacks/repo2docker-entrypoint index a1a2cac3..cc1404d5 100755 --- a/repo2docker/buildpacks/repo2docker-entrypoint +++ b/repo2docker/buildpacks/repo2docker-entrypoint @@ -15,10 +15,10 @@ if [[ ! -z "${R2D_ENTRYPOINT:-}" ]]; then if [[ ! -x "$R2D_ENTRYPOINT" ]]; then chmod u+x "$R2D_ENTRYPOINT" fi - exec "$R2D_ENTRYPOINT" "$@" >&"$log_fd" + exec "$R2D_ENTRYPOINT" "$@" 2>&1 >&"$log_fd" else - exec "$@" >&"$log_fd" + exec "$@" 2>&1 >&"$log_fd" fi # Close the logging output again -#exec {log_fd}>&- +exec {log_fd}>&- diff --git a/tests/unit/test_env.py b/tests/unit/test_env.py index d7de5fe6..4602210f 100644 --- a/tests/unit/test_env.py +++ b/tests/unit/test_env.py @@ -42,13 +42,15 @@ def test_env(): # value "--env", "SPAM_2=", - "--", + # "--", tmpdir, "/bin/bash", "-c", # Docker exports all passed env variables, so we can # just look at exported variables. - "export", + "export; sleep 1", + # "export; echo TIMDONE", + # "export", ], universal_newlines=True, stdout=subprocess.PIPE, @@ -61,6 +63,9 @@ def test_env(): # stdout should be empty assert not result.stdout + print(result.stderr.split("\n")) + # assert False + # stderr should contain lines of output declares = [x for x in result.stderr.split("\n") if x.startswith("declare")] assert 'declare -x FOO="{}"'.format(ts) in declares