Skip to content

App startup fails with confusing message when a Docker Compose file is not found #35383

@scottfrederick

Description

@scottfrederick

If an application includes a dependency on spring-boot-docker-compose but a compose YAML file is not found, app startup fails with a message that does not make the root cause very clear. The error message should make it more clear that a file was not found in the expected location.

2023-05-09T23:11:16.536Z  INFO 1 --- [           main] .s.b.d.c.l.DockerComposeLifecycleManager : Found docker compose file 'null'
2023-05-09T23:11:16.636Z ERROR 1 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.boot.docker.compose.core.DockerProcessStartException: Unable to start docker process. Is docker correctly installed?
	at org.springframework.boot.docker.compose.core.DockerCli.getDockerCommand(DockerCli.java:75) ~[spring-boot-docker-compose-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.docker.compose.core.DockerCli.<init>(DockerCli.java:62) ~[spring-boot-docker-compose-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.docker.compose.core.DockerCompose.get(DockerCompose.java:101) ~[spring-boot-docker-compose-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.docker.compose.lifecycle.DockerComposeLifecycleManager.getDockerCompose(DockerComposeLifecycleManager.java:132) ~[spring-boot-docker-compose-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.docker.compose.lifecycle.DockerComposeLifecycleManager.startup(DockerComposeLifecycleManager.java:103) ~[spring-boot-docker-compose-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.docker.compose.lifecycle.DockerComposeListener.onApplicationEvent(DockerComposeListener.java:53) ~[spring-boot-docker-compose-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.docker.compose.lifecycle.DockerComposeListener.onApplicationEvent(DockerComposeListener.java:35) ~[spring-boot-docker-compose-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-6.0.8.jar:6.0.8]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-6.0.8.jar:6.0.8]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-6.0.8.jar:6.0.8]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131) ~[spring-context-6.0.8.jar:6.0.8]
	at org.springframework.boot.context.event.EventPublishingRunListener.multicastInitialEvent(EventPublishingRunListener.java:136) ~[spring-boot-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.context.event.EventPublishingRunListener.contextLoaded(EventPublishingRunListener.java:98) ~[spring-boot-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.SpringApplicationRunListeners.lambda$contextLoaded$4(SpringApplicationRunListeners.java:72) ~[spring-boot-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at java.base/java.lang.Iterable.forEach(Unknown Source) ~[na:na]
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118) ~[spring-boot-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:112) ~[spring-boot-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.SpringApplicationRunListeners.contextLoaded(SpringApplicationRunListeners.java:72) ~[spring-boot-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:415) ~[spring-boot-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[spring-boot-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1305) ~[spring-boot-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1294) ~[spring-boot-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.example.books.server.BooksApplication.main(BooksApplication.java:26) ~[classes/:0.0.1-SNAPSHOT]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Unknown Source) ~[na:na]
	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) ~[workspace/:na]
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:95) ~[workspace/:na]
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[workspace/:na]
	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65) ~[workspace/:na]
Caused by: org.springframework.boot.docker.compose.core.ProcessStartException: Unable to start command docker version --format {{.Client.Version}}
	at org.springframework.boot.docker.compose.core.ProcessRunner.startProcess(ProcessRunner.java:115) ~[spring-boot-docker-compose-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.docker.compose.core.ProcessRunner.run(ProcessRunner.java:87) ~[spring-boot-docker-compose-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.docker.compose.core.ProcessRunner.run(ProcessRunner.java:74) ~[spring-boot-docker-compose-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	at org.springframework.boot.docker.compose.core.DockerCli.getDockerCommand(DockerCli.java:70) ~[spring-boot-docker-compose-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	... 30 common frames omitted
Caused by: java.io.IOException: Cannot run program "docker": error=2, No such file or directory
	at java.base/java.lang.ProcessBuilder.start(Unknown Source) ~[na:na]
	at java.base/java.lang.ProcessBuilder.start(Unknown Source) ~[na:na]
	at org.springframework.boot.docker.compose.core.ProcessRunner.startProcess(ProcessRunner.java:105) ~[spring-boot-docker-compose-3.1.0-SNAPSHOT.jar:3.1.0-SNAPSHOT]
	... 33 common frames omitted
Caused by: java.io.IOException: error=2, No such file or directory
	at java.base/java.lang.ProcessImpl.forkAndExec(Native Method) ~[na:na]
	at java.base/java.lang.ProcessImpl.<init>(Unknown Source) ~[na:na]
	at java.base/java.lang.ProcessImpl.start(Unknown Source) ~[na:na]
	... 36 common frames omitted


Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions