Spring boot gradle连续构建技巧不';不要在码头集装箱内工作
嗨,我正在尝试使用所描述的技巧来允许在docker容器内连续构建。当我在主机上打开两个单独的终端时,这个技巧可以很好地工作,但在docker容器中使用时失败 docker-compose.ymlSpring boot gradle连续构建技巧不';不要在码头集装箱内工作,spring-boot,docker,gradle,docker-compose,Spring Boot,Docker,Gradle,Docker Compose,嗨,我正在尝试使用所描述的技巧来允许在docker容器内连续构建。当我在主机上打开两个单独的终端时,这个技巧可以很好地工作,但在docker容器中使用时失败 docker-compose.yml build_server: image: gradle:6.3.0-jdk8 working_dir: /home/gradle/server volumes: - ./server:/home/gradle/server command: ["
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\u服务器
容器并在主机终端上运行bootRun
时,这个技巧可以很好地工作。我想知道为什么它在docker容器中不起作用。谢谢你的帮助 通过为服务器容器设置不同的项目缓存目录,找到了一种解决方法。i、 e.将命令替换为以下命令:
command: ["gradle", "bootRun", "--project-cache-dir=/tmp/cache"]
可能不是最好的解决方案,但它确实避免了gradle锁造成的问题。我非常确定,如果装载相同的gradle主文件夹或项目文件夹(锁文件所在的位置),每个容器中的守护进程都需要能够彼此通信。但我不知道使用了哪些端口以及如何使其工作,如果可能的话…@BjørnVester感谢您提供的信息。在这种情况下,也许我应该在一个容器中运行这两个任务?是的,这可能会起作用。这对我帮助很大,我在Vagrant和IntelliJ共享坐骑时遇到了同样的问题,这救了我!