找不到有效的 Docker 环境

Pra*_*nav 4 kotlin quarkus colima

我刚刚使用 Kotlin + Gradle + REST 从https://code.quarkus.io下载了一个新项目,并尝试执行./gradlew quarkusDev 并遇到以下错误:

\n
2023-04-18 17:05:57,007 INFO  [org.tes.doc.DockerMachineClientProviderStrategy] (build-44) docker-machine executable was not found on PATH ***(masked on purpose) ***\n2023-04-18 17:05:57,024 ERROR [org.tes.doc.DockerClientProviderStrategy] (build-44) Could not find a valid Docker environment. Please check configuration. Attempted configurations were:\n        UnixSocketClientProviderStrategy: failed with exception InvalidConfigurationException (Could not find unix domain socket). Root cause NoSuchFileException (/var/run/docker.sock)As no valid configuration was found, execution cannot continue.\nSee https://www.testcontainers.org/on_failure.html for more details.\n     2023-04-18 17:05:57,282 INFO  [org.tes.uti.ImageNameSubstitutor] (build-44) Image name substitution will be performed by: DefaultImageNameSubstitutor (composite of \'ConfigurationFileImageNameSubstitutor\' and \'PrefixingImageNameSubstitutor\')\n<====2023-04-18 17:05:57,288 INFO  [io.qua.dep.dev.IsolatedDevModeMain] (main) Attempting to start live reload endpoint to recover from previous Quarkus startup failure\n<====2023-04-18 17:05:57,613 ERROR [io.qua.dep.dev.IsolatedDevModeMain] (main) Failed to start quarkus: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors\n        [error]: Build step io.quarkus.kafka.client.deployment.DevServicesKafkaProcessor#startKafkaDevService threw an exception: java.lang.RuntimeException: java.lang.IllegalStateException: Previous attempts to find a Docker environment failed. Will not retry. Please see logs and check configuration\n        at io.quarkus.kafka.client.deployment.DevServicesKafkaProcessor.startKafkaDevService(DevServicesKafkaProcessor.java:105)\n        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)\n        at java.base/java.lang.reflect.Method.invoke(Method.java:578)\n        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:909)\n        at io.quarkus.builder.BuildContext.run(BuildContext.java:281)\n        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)\n        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)\n        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)\n        at java.base/java.lang.Thread.run(Thread.java:1623)\n        at org.jboss.threads.JBossThread.run(JBossThread.java:501)\nCaused by: java.lang.IllegalStateException: Previous attempts to find a Docker environment failed. Will not retry. Please see logs and check configuration\n        at org.testcontainers.dockerclient.DockerClientProviderStrategy.getFirstValidStrategy(DockerClientProviderStrategy.java:212)\n        at org.testcontainers.DockerClientFactory.getOrInitializeStrategy(DockerClientFactory.java:150)\n        at org.testcontainers.DockerClientFactory.client(DockerClientFactory.java:186)\n        at org.testcontainers.DockerClientFactory$1.getDockerClient(DockerClientFactory.java:104)\n        at com.github.dockerjava.api.DockerClientDelegate.listContainersCmd(DockerClientDelegate.java:188)\n        at io.quarkus.devservices.common.ContainerLocator.lookup(ContainerLocator.java:32)\n        at io.quarkus.devservices.common.ContainerLocator.locateContainer(ContainerLocator.java:45)\n        at io.quarkus.kafka.client.deployment.DevServicesKafkaProcessor.startKafka(DevServicesKafkaProcessor.java:222)\n        at io.quarkus.kafka.client.deployment.DevServicesKafkaProcessor.startKafkaDevService(DevServicesKafkaProcessor.java:95)\n        ... 9 more\n\n
Run Code Online (Sandbox Code Playgroud)\n

我的设置:

\n
quarkus --version                                                                                                                                                                                               \xee\x82\xb2 0|1 \xe2\x86\xb5 \xee\x82\xb2 6451 \xee\x82\xb2 17:15:31\n2.16.6.Final\n\n\ngradle --version                                                                                                                                                                                                    \n\n------------------------------------------------------------\nGradle 8.1\n------------------------------------------------------------\n\nBuild time:   2023-04-12 12:07:45 UTC\nRevision:     40ba32cde9d6daf2b92c39376d2758909dd6b813\n\nKotlin:       1.8.10\nGroovy:       3.0.15\nAnt:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021\nJVM:          20 (Homebrew 20)\nOS:           Mac OS X 11.6.2 x86_64\n-------------------------------------------------\ncolima version    \n                                                                                                                                                                                                  \ncolima version 0.5.4\ngit commit: feef4176f56a7dea487d43689317a9d7fe9de27e\n\nruntime: docker\narch: x86_64\nclient: v20.10.22\nserver: v20.10.20\n\n
Run Code Online (Sandbox Code Playgroud)\n

除了构建器提供的框架之外,我没有添加任何代码,如上所述,我使用 colima 而不是 docker。

\n

Jac*_*lle 7

在日志中,您可以看到 Quarkus 正在尝试在以下位置查找 docker 套接字:/var/run/docker.sock

但是当使用 Colima 时,路径是不同的:

v0.3.4 或更早版本 -> Docker 套接字位于 $HOME/.colima/docker.sock

v0.4.0 或更新版本 -> Docker 套接字位于 $HOME/.colima/default/docker.sock

也可以通过检查状态来检索它 colima status

由于您当前使用的是 Colima v0.5.4,我想 Quarkus 应该查看 path $HOME/.colima/default/docker.sock。但为了更加自信,只需跑去colima status拿真正的。

正确配置 env,以便 Quarkus 可以找到 Docker .sock

您必须通过运行以下命令来指示它:

export DOCKER_HOST="unix://${HOME}/.colima/default/docker.sock"
Run Code Online (Sandbox Code Playgroud)

或者禁用 devServices

您可以禁用 devServices,因此 quarkus 将不再需要 docker 来启动:只需将其添加quarkus.devservices.enabled=false到您的application.properties