【问题标题】:Can't connect to MySQL with Spring in Docker无法在 Docker 中使用 Spring 连接到 MySQL
【发布时间】:2018-05-28 08:46:28
【问题描述】:

我在 docker 容器中运行 mysql:

docker run -it --name mysql-db -e MYSQL_ROOT_PASSWORD=root \
    -e MYSQL_DATABASE=db -e MYSQL_USER=root -e MYSQL_PASSWORD=root mysql:latest
docker start mysql-db

我想在另一个 docker 容器中运行我的 Spring Boot 应用程序(使用 Maven):

docker build -t java-app .
docker run -it --name java-app --link mysql-db:mysql -p 8080:8080 java-app
docker start java-app

但我得到一个例外:

原因:java.net.ConnectException:连接被拒绝(连接 拒绝)

我的 Dockerfile:

FROM java:8
ADD target/demo-0.0.1-SNAPSHOT.jar /usr/share/demo/demo.jar 
ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/demo/demo.jar"]  

我的应用程序.yml:

spring:
    # General JPA properties
    jpa:
        show-sql: false
        database-platform: org.hibernate.dialect.MySQL57Dialect
        # Hibernate Specific properties
        hibernate:
            ddl-auto: create
        properties:
            hibernate:
                format_sql: false
    # DataSource configuration
    datasource:
        url: jdbc:mysql://mysql:3306/db
        username: root
        password: root

我的问题是什么?

MySQL 日志中有关于 -skip-name-resolve mode 的警告。

【问题讨论】:

    标签: mysql docker spring-boot


    【解决方案1】:

    看起来您的数据库根本不工作。您可以通过在第二个终端中运行 docker psdocker exec -it mysql-db mysql -u root -proot db 来验证这一点。它可能会失败。原因是您使用了-e MYSQL_USER=root 标志。此 docker 映像使用您提供的密码创建 root 用户,因此当您想再次创建 root 用户时,它会失败并关闭容器。只需将其更改为 -e MYSQL_USER=myuser 即可。

    【讨论】:

    • 数据库正在工作,我用两个命令检查了它。你的建议并没有改变任何东西。不过还是谢谢你。
    • 我已经复制了您的命令,但 db 未能完全初始化。您再次执行 docker start 但不确定它是否会启动工作数据库。当您运行我的 docker exec 命令时,您可以执行以下查询:SHOW TABLES; ?
    • 是的,我可以查询。
    • 当我尝试使用此标志 -e MYSQL_USER=myuser 时,我忘记重新创建图像(更改 yml)。所以我又试了一次,现在一切正常。非常感谢!
    • 在你的 application.yml 中声明的用户呢?您是否将其保留为root用户和root密码?或者我们只需要更改值 -e MYSQL_USER=myuser
    猜你喜欢
    • 2020-07-12
    • 2020-06-06
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 2020-07-24
    相关资源
    最近更新 更多