【发布时间】:2021-09-20 20:27:39
【问题描述】:
我正在使用带有 docker 的 spring boot。当我运行 docker-compose.yaml 文件时,它在 mysql 中显示以下错误:
Caused by: java.net.UnknownHostException: mysql
at java.base/java.net.InetAddress$CachedAddresses.get(Unknown Source) ~[na:na]
at java.base/java.net.InetAddress.getAllByName0(Unknown Source) ~[na:na]
at java.base/java.net.InetAddress.getAllByName(Unknown Source) ~[na:na]
at java.base/java.net.InetAddress.getAllByName(Unknown Source) ~[na:na]
at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:132) ~[mysql-connector-java-8.0.25.jar:8.0.25]
at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.25.jar:8.0.25]
我有这样的用户:
-
在 docker-compose.yaml 文件中我使用了下面的代码..
services: mysql: image: mysql:latest hostname: mysql restart: always ports: - 3306:3306 environment: MYSQL_DATABASE: accountdb MYSQL_USER: root MYSQL_PASSWORD: 123 MYSQL_ROOT_PASSWORD: 123 volumes: - db_data:/var/lib/mysql - ./src/main/resources/db/init.sql:/data/application/init.sql command: --init-file /data/application/init.sql my-service: image: myimage mem_limit: 700m ports: - "8081:8081" depends_on: - mysql -
在 Spring 启动一个applicaiton.yml 文件:
spring: application: name: account-opening datasource: url: jdbc:mysql://mysql:3306/accountdb?useSSL=false&serverTimezone=UTC username: root password: 123 jpa: hibernate: ddl-auto: create show-sql: true generate-ddl: true h2: console: enabled: true
我的代码有什么问题?请帮帮我
【问题讨论】:
-
你能验证你的 MySql 容器是否真的在运行吗?如果数据库容器无法启动,您可能会收到错误。解决问题的一个好方法是在前台运行
docker-compose up。 IE。没有-d选项。然后您会看到弹出的任何错误消息。 -
AFAIK mysql 是用 C++ 编写的。您显示的错误来自一个java程序,所以我确信它来自运行您的springboot应用程序的容器,而不是来自持有mysql的容器。精确度:
what is wrong with my code?在 SO 上不是可接受的问题,并列为number one reason to close a question as off-topic。my-service的 docker 文件在哪里?你如何启动你的应用程序?您采取了哪些调试步骤? mysql真的在运行吗?如果是,你能从my-serviceping mysql 容器吗? ... -
PS:你使用
mysql官方docker镜像初始化你的数据是错误的(除非你非常清楚你在做什么)。我建议您阅读documentation on dockerhub,删除服务上的command以恢复默认设置,并将init.sql脚本移至容器中的/docker-entrypoint-initdb.d中。实际上,我敢打赌,由于您的command自定义,mysql 不会在第二次运行时启动。 -
@HansKilian 它显示正在重新启动...
-
如果正在重启,说明启动失败。既然你有
restart: always,它就会一直尝试永远启动它。失败时会给出什么错误信息?
标签: spring spring-boot docker