Merge pull request #1222 from mokibit/print-full-dockerfile-path

Print full Dockerfile path instead of context on error
This commit is contained in:
Povilas Kanapickas 2025-05-28 17:34:45 +03:00 committed by GitHub
commit b650efbb33
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 54 additions and 0 deletions

View File

@ -2752,8 +2752,10 @@ def container_to_build_args(
build_args = []
if not is_path_git_url(ctx):
custom_dockerfile_given = False
if dockerfile:
dockerfile = os.path.join(ctx, dockerfile)
custom_dockerfile_given = True
else:
dockerfile_alts = [
"Containerfile",
@ -2773,6 +2775,9 @@ def container_to_build_args(
dockerfile = os.path.normpath(os.path.join(ctx, dockerfile))
build_args.extend(["-f", dockerfile])
else:
if custom_dockerfile_given:
# custom dockerfile name was also not found in the file system
raise OSError(f"Dockerfile not found in {dockerfile}")
raise OSError(f"Dockerfile not found in {ctx}")
build_args.extend(["-t", cnt["image"]])

View File

@ -0,0 +1 @@
test

View File

@ -3,3 +3,12 @@ services:
test:
build: ./context
image: build-fail-img
test_no_dockerfile:
build:
context: ./context_no_file
image: busybox
test_no_custom_dockerfile:
build:
context: ./context_no_file
dockerfile: Dockerfile-alt
image: busybox

View File

@ -22,9 +22,48 @@ class TestComposeBuildFail(unittest.TestCase, RunSubprocessMixin):
"-f",
compose_yaml_path(),
"build",
"test",
],
expected_returncode=127,
)
self.assertIn("RUN this_command_does_not_exist", str(output))
self.assertIn("this_command_does_not_exist: not found", str(error))
self.assertIn("while running runtime: exit status 127", str(error))
def test_dockerfile_does_not_exist(self):
out, error = self.run_subprocess_assert_returncode(
[
podman_compose_path(),
"-f",
compose_yaml_path(),
"build",
"test_no_dockerfile",
],
expected_returncode=1,
)
error = error.decode('utf-8')
result = '\n'.join(error.splitlines()[-1:])
expected_path = os.path.join(os.path.dirname(__file__), "context_no_file")
expected = f'OSError: Dockerfile not found in {expected_path}'
self.assertEqual(expected, result)
def test_custom_dockerfile_does_not_exist(self):
out, error = self.run_subprocess_assert_returncode(
[
podman_compose_path(),
"-f",
compose_yaml_path(),
"build",
"test_no_custom_dockerfile",
],
expected_returncode=1,
)
error = error.decode('utf-8')
result = '\n'.join(error.splitlines()[-1:])
expected_path = os.path.join(os.path.dirname(__file__), "context_no_file/Dockerfile-alt")
expected = f'OSError: Dockerfile not found in {expected_path}'
self.assertEqual(expected, result)