嗨,我正在尝试使用here描述的技巧来允许在docker容器内进行连续构建。当我在主机上打开两个单独的终端时,此技巧可以正常工作,但在docker容器中使用时,该技巧将失败。
docker-compose.yml
build_server:
image: gradle:6.3.0-jdk8
working_dir: /home/gradle/server
volumes:
- ./server:/home/gradle/server
command: ["gradle", "build", "--continuous", "-x", "test"]
server:
image: gradle:6.3.0-jdk8
working_dir: /home/gradle/server
volumes:
- ./server:/home/gradle/server
ports:
- 8080:8080
depends_on:
- build_server
restart: on-failure
command: ["gradle", "bootRun"]
我从服务器容器得到的错误消息:server_1 | FAILURE: Build failed with an exception.
server_1 |
server_1 | * What went wrong:
server_1 | Gradle could not start your build.
server_1 | > Could not create service of type ScriptPluginFactory using BuildScopeServices.createScriptPluginFactory().
server_1 | > Could not create service of type ChecksumService using BuildSessionScopeServices.createChecksumService().
server_1 | > Timeout waiting to lock checksums cache (/home/gradle/server/.gradle/checksums). It is currently in use by another Gradle instance.
server_1 | Owner PID: unknown
server_1 | Our PID: 31
server_1 | Owner Operation: unknown
server_1 | Our operation:
server_1 | Lock file: /home/gradle/server/.gradle/checksums/checksums.lock
似乎gradle已在本地缓存文件上添加了锁,并阻止了bootRun
任务在其他容器中运行。但是,当我在主机上的两个终端上运行任务时,或者仅在主机终端上运行build_server
容器并运行bootRun
时,此技巧很好用。我不知道为什么它在docker容器中不起作用。感谢您的提前帮助!
最佳答案
通过为服务器容器设置其他项目缓存目录找到了解决方法。即用以下命令替换命令
command: ["gradle", "bootRun", "--project-cache-dir=/tmp/cache"]
可能不是最好的解决方案,但它确实可以解决gradle锁引起的问题。
关于spring-boot - gradle连续构建技巧在docker容器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62929155/