我有一个java项目,可以使用成功运行
./mvnw spring-boot:run
使用以下指令集通过docker compose运行的相同项目将不会运行:
内部docker-compose.yml:
project:
build: ./project
ports:
- 8080:8080
并且在项目目录中的Dockerfile中:
ENTRYPOINT ["./mvnw","spring-boot:run"]
现在有趣的部分是,当使用docker compose时,我得到了以下异常消息:
InvocationTargetException: Invalid bean definition with name 'redisTemplate' defined in class path resource [****/****/****/****/****/config/RedisContextConfiguration.class]: Cannot register bean definition [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=****.****.***.***.redis.config.RedisContextConfiguration; factoryMethodName=redisTemplate; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [***/***/**/***/**/config/RedisContextConfiguration.class]] for bean 'redisTemplate': There is already [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=appConfiguration; factoryMethodName=redisTemplate; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [***/****/***/***/config/AppConfiguration.class]]
我以前也遇到过同样的错误,但我通过在application.properties文件中添加以下行来避免它:
spring.data.redis.repositories.enabled=false
现在,这篇文章告诉我,不知怎么的,docker-compose看不到对application.properties所做的更改。由于容器无法运行,我无法使用docker-exec来仔细阅读里面的文件并查看application.properties里面的内容
有没有办法访问用于创建容器的图像中的这个.属性,这样我就可以确认我对该属性不在那里的怀疑?项目在本地运行但不使用docker,可能还有其他原因吗?感谢您的帮助。
您可以尝试docker run -it your_image_name sh
来获得一个shell,它将帮助您期待您的图像内容。我在docker命令中看到两个环境变量SERVER_PORT和APP_PROPERTIES,但您没有在docker-compose.yml.中声明它们
原来Dockerfile引用的是docker-application.properties,而不是application.properties文件。