Spring Boot 应用程序无法启动,无法启动 docker 进程

问题描述 投票:0回答:1

我有一个简单的 Spring Boot

3.2.3
应用程序。尝试集成 Docker Compose 支持后,应用程序无法启动,并出现一条相当混乱的消息:
Unable to start docker process. Is docker correctly installed?
— 类似于 此问题

我确实安装了 Docker——我广泛使用它,所以这不是问题。

compose.yaml
文件(位于项目根目录中)有效:

$ docker compose version 
Docker Compose version 2.26.1
$ docker compose config --quiet
$ docker compose up --detach --remove-orphans 
[+] Running 10/10
 ✔ database Pulled                                                                                                                                                                                             6.3s 
   ✔ 4abcf2066143 Pull complete                                                                                                                                                                                0.3s 
   ✔ 128d1b74d24d Pull complete                                                                                                                                                                                0.2s 
   ✔ 0a392327555d Pull complete                                                                                                                                                                                0.2s 
   ✔ 0e14a31643e8 Pull complete                                                                                                                                                                                2.4s 
   ✔ 904e95badb7d Pull complete                                                                                                                                                                                0.7s 
   ✔ 8f6103a2e811 Pull complete                                                                                                                                                                                0.8s 
   ✔ 02b106837f9f Pull complete                                                                                                                                                                                0.9s 
   ✔ d34b010d3edc Pull complete                                                                                                                                                                                1.0s 
   ✔ 696a345da38f Pull complete                                                                                                                                                                                1.2s 
[+] Running 3/3
 ✔ Network spring-boot-rest-sandbox  Created                                                                                                                                                                   0.0s 
 ✔ Volume "postgres-data-volume"     Created                                                                                                                                                                   0.0s 
 ✔ Container database                Started

$ uname -a 
Linux uplink 6.6.23-1-lts #1 SMP PREEMPT_DYNAMIC Wed, 27 Mar 2024 07:47:20 +0000 x86_64 GNU/Linux

无论如何,每次我运行该应用程序时,它都无法启动:

$ ./gradlew bootRun
> Task :generateEffectiveLombokConfig UP-TO-DATE
> Task :compileJava UP-TO-DATE
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE
> Task :resolveMainClassName UP-TO-DATE

2024-04-05 18:00:07,039 |- DEBUG in org.acme.Application:51 [main] - Running with Spring Boot v3.2.3, Spring v6.1.4
2024-04-05 18:00:07,040 |-  INFO in org.acme.Application:660 [main] - The following 1 profile is active: "dev"
2024-04-05 18:00:07,194 |- ERROR in o.s.boot.SpringApplication:851 [main] - 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$DockerCommands.getDockerCommand(DockerCli.java:140)
        at org.springframework.boot.docker.compose.core.DockerCli$DockerCommands.<init>(DockerCli.java:129)
        at org.springframework.boot.docker.compose.core.DockerCli.lambda$new$0(DockerCli.java:65)
        at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1228)
        at org.springframework.boot.docker.compose.core.DockerCli.<init>(DockerCli.java:64)
        at org.springframework.boot.docker.compose.core.DockerCompose.get(DockerCompose.java:92)
        at org.springframework.boot.docker.compose.lifecycle.DockerComposeLifecycleManager.getDockerCompose(DockerComposeLifecycleManager.java:154)
        at org.springframework.boot.docker.compose.lifecycle.DockerComposeLifecycleManager.start(DockerComposeLifecycleManager.java:110)
        at org.springframework.boot.docker.compose.lifecycle.DockerComposeListener.onApplicationEvent(DockerComposeListener.java:53)
        at org.springframework.boot.docker.compose.lifecycle.DockerComposeListener.onApplicationEvent(DockerComposeListener.java:35)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:138)
        at org.springframework.boot.context.event.EventPublishingRunListener.multicastInitialEvent(EventPublishingRunListener.java:136)
        at org.springframework.boot.context.event.EventPublishingRunListener.contextLoaded(EventPublishingRunListener.java:98)
        at org.springframework.boot.SpringApplicationRunListeners.lambda$contextLoaded$4(SpringApplicationRunListeners.java:72)
        at java.base/java.lang.Iterable.forEach(Iterable.java:75)
        at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118)
        at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:112)
        at org.springframework.boot.SpringApplicationRunListeners.contextLoaded(SpringApplicationRunListeners.java:72)
        at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:432)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:333)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343)
        at org.acme.Application.main(Application.java:23)
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)
        at org.springframework.boot.docker.compose.core.ProcessRunner.run(ProcessRunner.java:87)
        at org.springframework.boot.docker.compose.core.ProcessRunner.run(ProcessRunner.java:74)
        at org.springframework.boot.docker.compose.core.DockerCli$DockerCommands.getDockerCommand(DockerCli.java:135)
        ... 25 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(ProcessBuilder.java:1170)
        at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1089)
        at org.springframework.boot.docker.compose.core.ProcessRunner.startProcess(ProcessRunner.java:105)
        ... 28 common frames omitted
Caused by: java.io.IOException: error=2, No such file or directory
        at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
        at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:295)
        at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:225)
        at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1126)
        ... 30 common frames omitted

关于如何推进这种集成并实现预期的行为有什么建议吗?

java spring spring-boot docker-compose
1个回答
0
投票

我已经成功解决了这个问题,尽管我还不清楚确切的原因。我没有进行任何修改,但该功能现在可以按预期工作。

我确实验证了

/usr/bin
已正确添加到
PATH
,但最初遇到了困难。

$ ./gradlew bootRun 
Configuration on demand is an incubating feature.
> Task :generateEffectiveLombokConfig FROM-CACHE
> Task :compileJava
> Task :processResources UP-TO-DATE
> Task :classes
> Task :resolveMainClassName

> Task :bootRun

...

2024-04-10 17:08:38,836 |- DEBUG in org.acme.Application:51 [main] - Running with Spring Boot v3.2.4, Spring v6.1.5
2024-04-10 17:08:38,836 |-  INFO in org.acme.Application:660 [main] - The following 1 profile is active: "dev"
2024-04-10 17:08:41,667 |-  WARN in liquibase.lockservice:37 [main] - Failed to release change log lock
All objects dropped from spring-boot@jdbc:postgresql://127.0.0.1:5432/spring-boot
Running Changeset: database/migrations/changelog-1.sql::1::liquibase
Liquibase: Update has been successful. Rows affected: 1
2024-04-10 17:08:42,004 |-  INFO in o.s.b.w.e.netty.NettyWebServer:141 [main] - Netty started on port 8080
2024-04-10 17:08:42,011 |-  INFO in org.acme.Application:56 [main] - Started Application in 3.451 seconds (process running for 3.655)

如果遇到任何进一步的问题,我会更新答案 - 并且我能够查明原因。

© www.soinside.com 2019 - 2024. All rights reserved.