繁体   English   中英

无法将 spring 连接到 docker 容器中的 mysql 数据库

[英]unable to connect spring to mysql database in docker container

我已经从 spring 应用程序创建了一个 docker 图像,但出现无法访问 mysql 数据库的错误,我在解决这个问题时遇到了问题。

我使用 Dockerfile 创建了一个图像

FROM openjdk:17-jdk-alpine
EXPOSE 8080
ARG JAR_FILE=./sample-service.jar
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

创建图像后,我创建了 docker-compose.yml,这是我的 docker-compose.yml:


version: "3"
services:
  sample-service:
    image: v2stechit/sample-service
    ports:
        - "8080:8080"                      
    restart: always                            
    environment:
        SPRING_DATASOURCE_URL: jdbc:mysql://localhost:3306/buddyto_mstr_local?useSSL=false
        SPRING_DATASOURCE_USERNAME: root
        SPRING_DATASOURCE_PASSWORD: root
    networks:
      - spring-mysql
    depends_on:
      - mysqldb
 
  mysqldb:
    image: mysql:8.0.29
    networks:
      - spring-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=buddyto_mstr_local
      - MYSQL_USERNAME=root
      - MYSQL_PASSWORD=root
   ports:
      - 3306:3306
networks:
  spring-mysql:

但它没有在浏览器中打开,所以我检查了日志并得到了这个:

这是 spring docker 容器日志: https://pastebin.com/raw/pjiscq4T

这是 mysql 日志:

2022-11-30 05:18:01+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.29-1.el8 started.
2022-11-30 05:18:01+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2022-11-30 05:18:01+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.29-1.el8 started.
'/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
2022-11-30T05:18:01.727948Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.29) starting as process 1
2022-11-30T05:18:01.744335Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-11-30T05:18:01.892603Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-11-30T05:18:02.206174Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2022-11-30T05:18:02.206242Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2022-11-30T05:18:02.209090Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2022-11-30T05:18:02.251051Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
2022-11-30T05:18:02.251175Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.29'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.

我该如何解决这个问题?

我尝试为 mysql 使用空密码环境变量。

尝试更改数据库名称,将 mysql 版本更改为 5.6、8 和 8.0.29

我不确定下一步该怎么做。

我期待 spring 应用程序与 mysql 链接

localhost中的本地主机不会解析为服务器的本地主机。 相反,您需要指定 mysql 服务mysqldb的名称。

所以这将变成: SPRING_DATASOURCE_URL: jdbc:mysql://msqldb:3306/buddyto_mstr_local?useSSL=false

您也可以尝试提供运行 docker 的服务器的 IP 而不是mysqldb

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM