当前位置: 首页 > 知识库问答 >
问题:

Docker compose spring boot无法连接到mysql db

金阳华
2023-03-14

我有一个连接到mysql数据库的Spring Boot应用程序。如果我以经典的方式在本地运行它,它工作得很好。但当我尝试dockerise时,它-数据库成功启动,但应用程序却看不到数据库。

我的DockerFile:

FROM openjdk:11-jdk-slim
ADD start-local.sh /start-local.sh
RUN chmod +x start-local.sh
ENTRYPOINT [ "sh", "-c", "./start-local.sh" ]
#!/bin/sh

echo "Waiting for the database server to start"
echo "********************************************************"
apt-get update && apt-get install -y netcat
while ! nc -z mysql 3306; do sleep 3; done
echo "******** Database Server has started"
echo "Starting account service"
java -jar /mnt/service-2.4.0.jar
version: '2'
services:
  mysql:
    image: mysql:5.7.23
    environment:
      - MYSQL_ROOT_PASSWORD=root
    entrypoint:
      sh -c "echo 'CREATE DATABASE IF NOT EXISTS books;  CREATE DATABASE IF NOT EXISTS notifications' > /docker-entrypoint-initdb.d/init.sql;/usr/local/bin/docker-entrypoint.sh --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --sql_mode="""
    ports:
      - "3306:3306"

  account_app:
    image: service_img
    environment:
      - "SPRING_PROFILES_ACTIVE=local"
    ports:
      - "8083:8083"
    volumes:
      - "/build/libs/:/mnt"

我执行的内容:

  • 首先,我构建我的service_img
  • 然后执行docker-compose up。在日志中,我看到数据库启动日志,然后是应用程序启动日志,然后是错误:

有什么建议吗?

共有1个答案

查宜修
2023-03-14

当运行一个组合“堆栈”时,docker使用它自己的DNS机制。

这意味着,如果您在account_app容器内对主机名mysql执行DNS查询,该查询将返回名为mysql的容器的IP地址(可能带有堆栈名的前缀)

简而言之:配置您的Spring应用程序以连接到mysql数据库,而不是localhost上的数据库,而是mysql上的数据库,这样您就可以开始了。

您可能会设置一些环境变量来配置它。

 类似资料:
  • 问题内容: 我正在尝试使用Ruby on Rails运行Selenium的示例脚本。我必须使用代理运行它。这是我的代码: 我收到以下错误: 有人能帮我吗…?我已经尝试了好几个小时,却找不到问题…真的不知道该怎么办。 环境: Ubuntu 16.04 LTS,Firefox 45.0,rbenv 2.3.1 另一个问题:有人知道Selenium + Ruby on Rails的示例吗?我找不到真正好

  • 我正在尝试连接到MySQL服务器,但出现无法处理的错误。 java.sql.SQLNonTransientConnectionException:无法创建到数据库服务器的连接。尝试重新连接3次。放弃。com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)com.mysql.cj.jdbc.excepti

  • 我真的想不通为什么我不能用下面的代码连接到我的Django项目内的JQuery。你能告诉我是什么原因吗?多谢! null null

  • 我正在尝试使用Android studio提供的工具将我的Android应用程序连接到firebase,但我面临着很多麻烦。 我已经尝试更新依赖到最新的最新的谷歌服务,但错误仍然存在,显示的错误是无法解析Android应用模块的Gradle配置。解决分级生成问题和/或重新同步。 分级/应用程序a

  • 我正在开发Selenium,目前我有一个连接到两个运行linux和所有浏览器的虚拟机的集线器。 我能够启动浏览器,直到它突然停止。火狐或任何其他浏览器都不会启动。我得到以下错误。 45000 ms后无法连接到端口7055上的主机127.0.0.1。 我运行Selenium服务器独立2.26与火狐16.0.2. 请帮忙。

  • Q-我安装了git以获取最新版本的Angular。当我尝试运行时 我连接到github 443错误失败 我甚至试过 这使我无法连接,没有错误消息。 我在公司防火墙后面。转到控制面板时,我看不到我的代理详细信息- 我终于做到了。我将更新我所采取的程序,以便只是想编译我所做的所有步骤,以使它正常工作

  • 我试图使用将一些更改推送到github,但一段时间后它显示错误 我刚刚创建了回购协议,已经promise了两次。我通过Mac OS X Yosemite 10.10.2中的家庭WiFi和操作系统连接到互联网。

  • 输入JDBC的用户名:hive2://localhost:10001/default:输入JDBC的密码:hive2:/localhost:10001/default:17/08/19 09:25:14[main]:警告JDBC.hiveConnection:无法连接到localhost:10001无法打开到HS2服务器的连接。请检查服务器URI,如果URI正确,请让管理员检查服务器状态。错误:无