【问题标题】:Docker compose-up SpringBoot MysqlDocker 编写 SpringBoot Mysql
【发布时间】:2021-06-02 14:37:09
【问题描述】:

我是 docker 的新手,我在 youtube 上观看视频,我想制作我的第一个容器,当然这有很多问题。

这是我的错误。

enter image description here

docker-compose.yml:

version: "3.2"
 services:

   autoshop:
    container_name: autoshop-spring
    image: autoshop
    restart: on-failure
    depends_on:
      - autoshopdb
    ports:
      - "8081:8080"

  autoshopdb:
    image: mysql
    container_name: autoshopdb
    environment:
      MYSQL_ROOT_PASSWORD: dominik372
      MYSQL_DATABASE: shopspring
      MYSQL_USER: root
      MYSQL_PASSWORD: dominik372
    ports:
      - "3307:3306"

application.proporties

server.port=8080
spring.datasource.url=jdbc:mysql://autoshopdb:3306/shopspring?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=dominik372
#spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

这是我的 Dockerfile

FROM openjdk:15-jdk-alpine
ADD target/autoshop-0.0.1-SNAPSHOT.jar autoshop-0.0.1-SNAPSHOT.jar
EXPOSE 8080
CMD java -jar autoshop-0.0.1-SNAPSHOT.jar

我需要帮助!

【问题讨论】:

  • 您能否编辑问题以包含错误消息或异常,而不是“在此处输入图像描述”?复制并粘贴文本docker-compose up 输出,而不是屏幕截图。

标签: mysql spring docker


【解决方案1】:

以下是带有 mysql 和 Spring Boot 映像的“docker-compose”示例: https://github.com/eventuate-tram/eventuate-tram-sagas/blob/master/docker-compose-mysql.yml

根据此示例,您的设置应如下所示:

docker-compose.yml

  autoshopdb:
    image: mysql
    container_name: autoshopdb
    environment:
      MYSQL_ROOT_PASSWORD: dominik372
      MYSQL_DATABASE: shopspring
      MYSQL_USER: root
      MYSQL_PASSWORD: dominik372
    ports:
      - 3306:3306

application.properties

spring.datasource.url=jdbc:mysql://autoshopdb/shopspring?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=dominik372

或者按照这个例子:https://dev.to/scottshipp/docker-compose-a-spring-boot-app-backed-by-mysql-89m

你可以试试这个:

docker-compose.yml

  autoshopdb:
    image: mysql
    container_name: autoshopdb
    environment:
      MYSQL_ROOT_PASSWORD: dominik372
      MYSQL_DATABASE: shopspring
      MYSQL_USER: root
      MYSQL_PASSWORD: dominik372
    ports:
      - 3306:3306

application.properties

spring.datasource.url=jdbc:mysql://autoshopdb:3306/shopspring?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=dominik372

希望对你有帮助

【讨论】:

  • 错误:对于 autoshop_autoshop-db_1 无法启动服务 autoshop-db:端口不可用:监听 tcp 0.0.0.0:3306:绑定:每个套接字地址(协议/网络地址/端口)仅使用一次) 通常是允许的。错误:对于 autoshop-db 无法启动服务 autoshop-db:端口不可用:监听 tcp 0.0.0.0:3306:绑定:每个套接字地址(协议/网络地址/端口)通常只允许使用一次。错误:启动项目时遇到错误。
  • 有另一个应用程序在同一个 3306 端口上运行。很可能,您在 3306 端口上有另一个正在运行的 mysql 服务器。我会试着找到它并杀死它。更改端口也可能有所帮助,但您似乎已经尝试过了。如果将端口更改为 3307,请确保在 spring.datasource.url 中也使用 3307。但我不认为在你的情况下运行两个 mysql 实例是一个好主意。
【解决方案2】:

请务必注意 HOST_PORT 和 CONTAINER_PORT 之间的区别。在您的示例中,对于 autoshopdb,HOST_PORT 为 3307,容器端口为 3306(mysql 默认值)。网络服务到服务的通信使用 CONTAINER_PORT。定义 HOST_PORT 后,该服务也可以在 swarm 之外访问。

在 Web 容器中,您到 autoshopdb 的连接字符串看起来像 mysql://autoshopdb:3306,而在主机上,连接字符串看起来像 mysql://{DOCKER_IP}:3307

在此处查看更多信息: https://docs.docker.com/compose/networking/

所以,在你的情况下,正确的 mysql url 似乎应该是:

spring.datasource.url=jdbc:mysql://{DOCKER_IP}:3307/shopspring?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false

但你也可以试试:

spring.datasource.url=jdbc:mysql://autoshopdb:3307/shopspring?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false

也许它会起作用

【讨论】:

    猜你喜欢
    • 2019-08-04
    • 2020-07-04
    • 2022-01-22
    • 2022-01-23
    • 2020-03-03
    • 2021-10-13
    • 2019-11-06
    • 2020-11-22
    • 1970-01-01
    相关资源
    最近更新 更多