gpt4 book ai didi

docker - 在 Docker 中运行简单的 Java Gradle 应用程序

转载 作者:行者123 更新时间:2023-12-02 02:36:50 26 4
gpt4 key购买 nike

我有一个带有 Gradle 构建的简单 Java 服务器应用程序。它与我的主机上的 gradle run 完美配合。但是,我想在 docker 镜像中构建它并作为 docker 容器运行。

我正在使用 docker-machine(版本 0.13.0):

docker-machine create --driver virtualbox --virtualbox-memory 6000 default
docker-machine start
eval $(docker-machine env default)

我在 ./serverapp/Dockerfile 中有以下 Dockerfile 镜像构建脚本:

FROM gradle:4.3-jdk-alpine
ADD . /code
WORKDIR /code
CMD ["gradle", "--stacktrace", "run"]

我可以完美地构建:

➜  docker build -t my-server-app .
Sending build context to Docker daemon 310.3kB
Step 1/4 : FROM gradle:4.3-jdk-alpine
---> b803ec92baec
Step 2/4 : ADD . /code
---> Using cache
---> f458b0be79dc
Step 3/4 : WORKDIR /code
---> Using cache
---> d98d04eda627
Step 4/4 : CMD ["gradle", "--stacktrace", "run"]
---> Using cache
---> 869262257870
Successfully built 869262257870
Successfully tagged my-server-app:latest

当我尝试运行此图像时:

➜  docker run --rm my-server-app

FAILURE: Build failed with an exception.

* What went wrong:
Could not create service of type ScriptPluginFactory using BuildScopeServices.createScriptPluginFactory().
> Could not create service of type CrossBuildFileHashCache using BuildSessionScopeServices.createCrossBuildFileHashCache().

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.internal.service.ServiceCreationException: Could not create service of type ScriptPluginFactory using BuildScopeServices.createScriptPluginFactory().
at org.gradle.internal.service.DefaultServiceRegistry$FactoryMethodService.invokeMethod(DefaultServiceRegistry.java:797)

<snip>
... 60 more
Caused by: org.gradle.api.UncheckedIOException: Failed to create parent directory '/code/.gradle/4.3' when creating directory '/code/.gradle/4.3/fileHashes'
at org.gradle.util.GFileUtils.mkdirs(GFileUtils.java:271)
at org.gradle.cache.internal.DefaultPersistentDirectoryStore.open(DefaultPersistentDirectoryStore.java:56)

为什么创建该目录时会遇到问题?

这应该是一个非常简单的任务,谁能告诉我他们如何让这个简单的场景发挥作用?

仅供引用,运行所有内容的当前版本。我在我的主机上使用 Gradle 4.3.1,以及来自 docker hub 的官方 Gradle 4.3 基础镜像,我在我的主机上使用当前版本的 JDK 8 以及当前版本的 docker、docker-machine 和 docker-也作曲。

最佳答案

修复方法是在 Dockerfile 中的 /code 目录上指定 --chown=gradle 权限。许多 Docker 镜像被设计为以 root 身份运行,基础 Gradle 镜像以用户 gradle 身份运行。

FROM gradle:4.3-jdk-alpine
ADD --chown=gradle . /code
WORKDIR /code
CMD ["gradle", "--stacktrace", "run"]

Ethan Davis 建议使用 /home/gradle 而不是 code。这可能也有效,但我没有想到这一点。

docker 镜像维护者应该有一个简单的入门类型引用示例,展示获得基本用法的推荐方法。

关于docker - 在 Docker 中运行简单的 Java Gradle 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47340984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com