无法在我的 Spring 引导应用程序中 运行 docker-compose.yml(引发图像问题)
Cannot run docker-compose.yml (throw image issues) in my Spring Boot App
我的 Spring 启动应用程序中有一个关于 运行ning docker-compose.yml 的问题。
当我 运行 这个命令 (docker-compose up -d) 时,图像部分出现问题。
我试图解决这个问题,但我做不到。
我该如何解决?
我的问题如下所示。
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
这是我的项目:My Project
下面是我的 docker-compose.yml。
version: '3.8'
services:
logstash:
image: docker.elastic.co/logstash/logstash:7.15.2
user: root
command: -f /etc/logstash/conf.d/
volumes:
- ./logstash/:/etc/logstash/conf.d/
ports:
- "5000:5000"
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
depends_on:
- elasticsearch
kibana:
image: docker.elastic.co/kibana/kibana:7.15.2
user: root
volumes:
- ./kibana/:/usr/share/kibana/config/
ports:
- "5601:5601"
depends_on:
- elasticsearch
entrypoint: ["./bin/kibana", "--allow-root"]
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.15.2
user: root
volumes:
- ./elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
app:
image: 'springbootelk:latest'
build:
context: .
container_name: SpringBootElk
depends_on:
- db
- logstash
ports:
- '8077:8077'
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/springbootexample?useSSL=false&serverTimezone=Turkey
- SPRING_DATASOURCE_USERNAME=springexample
- SPRING_DATASOURCE_PASSWORD=111111
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
db:
container_name: mysql-latest
image: 'mysql:latest'
ports:
- "3306:3306"
restart: always
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
volumes:
- db-data:/var/lib/mysql
# Volumes
volumes:
db-data:
有几个问题,为什么它不起作用。
第一件事 - 您的测试设置不正确。应用程序尝试在 test
阶段连接到数据库。但是在 test
阶段还没有任何 运行 容器。您可以正确设置它,或者从测试目录中删除 MainApplicationTests
class,或者通过关闭测试执行,只需在 Dockerfile
中添加 -Dmaven.test.skip
作为 mvnw package
命令。之后您的图像将正确构建。
第二件事,您需要为您的应用程序允许 public 密钥检索。为此,您可以将 allowPublicKeyRetrieval=true
添加到 jdbc url。您可以在这里阅读更多相关信息:.
这些步骤将允许您的应用程序启动(至少它将解决数据库连接问题)。但是,我发现了另一个问题。您在应用程序配置中设置 context-path
等于 /api
。您还为 PersonController
添加了 @RequestMapping("/api")
。要访问人员列表,您需要使用以下 url:http://localhost:8077/api/api/persons
。可能,这不是您想要的。要修复它,您可以从任何地方删除它。
我的 Spring 启动应用程序中有一个关于 运行ning docker-compose.yml 的问题。 当我 运行 这个命令 (docker-compose up -d) 时,图像部分出现问题。
我试图解决这个问题,但我做不到。 我该如何解决?
我的问题如下所示。
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
这是我的项目:My Project
下面是我的 docker-compose.yml。
version: '3.8'
services:
logstash:
image: docker.elastic.co/logstash/logstash:7.15.2
user: root
command: -f /etc/logstash/conf.d/
volumes:
- ./logstash/:/etc/logstash/conf.d/
ports:
- "5000:5000"
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
depends_on:
- elasticsearch
kibana:
image: docker.elastic.co/kibana/kibana:7.15.2
user: root
volumes:
- ./kibana/:/usr/share/kibana/config/
ports:
- "5601:5601"
depends_on:
- elasticsearch
entrypoint: ["./bin/kibana", "--allow-root"]
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.15.2
user: root
volumes:
- ./elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
app:
image: 'springbootelk:latest'
build:
context: .
container_name: SpringBootElk
depends_on:
- db
- logstash
ports:
- '8077:8077'
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/springbootexample?useSSL=false&serverTimezone=Turkey
- SPRING_DATASOURCE_USERNAME=springexample
- SPRING_DATASOURCE_PASSWORD=111111
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
db:
container_name: mysql-latest
image: 'mysql:latest'
ports:
- "3306:3306"
restart: always
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
volumes:
- db-data:/var/lib/mysql
# Volumes
volumes:
db-data:
有几个问题,为什么它不起作用。
第一件事 - 您的测试设置不正确。应用程序尝试在 test
阶段连接到数据库。但是在 test
阶段还没有任何 运行 容器。您可以正确设置它,或者从测试目录中删除 MainApplicationTests
class,或者通过关闭测试执行,只需在 Dockerfile
中添加 -Dmaven.test.skip
作为 mvnw package
命令。之后您的图像将正确构建。
第二件事,您需要为您的应用程序允许 public 密钥检索。为此,您可以将 allowPublicKeyRetrieval=true
添加到 jdbc url。您可以在这里阅读更多相关信息:
这些步骤将允许您的应用程序启动(至少它将解决数据库连接问题)。但是,我发现了另一个问题。您在应用程序配置中设置 context-path
等于 /api
。您还为 PersonController
添加了 @RequestMapping("/api")
。要访问人员列表,您需要使用以下 url:http://localhost:8077/api/api/persons
。可能,这不是您想要的。要修复它,您可以从任何地方删除它。