【发布时间】:2021-04-12 05:44:42
【问题描述】:
我是 Docker 新手,作为 spring mvc 应用程序 dockerization 的一部分,我无法将我的应用程序连接到 MySQL 服务器
Dockerfile :这是 Spring mvc 应用程序,所以需要将我的战争复制到
tomcat container
FROM tomcat:8.0.20-jre8
COPY /target/CTH.war /usr/local/tomcat/webapps/
docker-compose.yml
version: '3'
services:
mysql-standalone:
image: 'mysql:5.7'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./docker/provision/mysql/init:/docker-entrypoint-initdb.d
environment:
- MYSQL_ROOT_PASSWORD= root
- MYSQL_USER= root
- MYSQL_PASSWORD= root
- MYSQL_DATABASE= CTH
- MYSQL_DATABASE= CTH_CHAT
ports:
- "3307:3306"
cth-docker-container:
image: cth-docker-container
ports:
- "8082:8082"
environment:
CTH_DATASOURCE_DATABASE: CTH
CTH_DATASOURCE_SERVERNAME: mysql-standalone
CTH_DATASOURCE_USERNAME: root
CTH_DATASOURCE_PASSWORD: root
CTH_DATASOURCE_PORT: 3307
CTH_CHAT_DATASOURCE_DATABASE: CTH_CHAT
CTH_CHAT_DATASOURCE_SERVERNAME: mysql-standalone
CTH_CHAT_DATASOURCE_USERNAME: root
CTH_CHAT_DATASOURCE_PASSWORD: root
CTH_CHAT_DATASOURCE_PORT: 3307
build:
context: "./"
dockerfile: "Dockerfile"
depends_on:
- mysql-standalone
application.properties :这是 spring mvc 应用程序,应用程序使用 MySQL db 和两个数据库
1st db
dbuser.local=${CTH_DATASOURCE_USERNAME:root}
dbpassword.local=${CTH_DATASOURCE_PASSWORD:root}
dbdatabaseName.local=${CTH_DATASOURCE_DATABASE:CTH}
dbserverName.local=${CTH_DATASOURCE_SERVERNAME:localhost}
dbportNumber.local=${CTH_DATASOURCE_PORT:3306}
2nd db
dbuser.cth.chat.local=${CTH_CHAT_DATASOURCE_USERNAME:root}
dbpassword.cth.chat.local=${CTH_CHAT_DATASOURCE_PASSWORD:root}
dbdatabaseName.cth.chat.local=${CTH_CHAT_DATASOURCE_USERNAME:CTH_CHAT}
dbserverName.cth.chat.local=${CTH_CHAT_DATASOURCE_SERVERNAME:localhost}
dbportNumber.cth.chat.local=${CTH_CHAT_DATASOURCE_PORT:3306}
我阅读了我创建 dockerfile 和 docker-compose 文件的文章https://medium.com/@asce4s/dockerize-spring-mvc-application-a9ffbd11eadbhttps://github.com/abagayev/docker-bootstrap-collection/tree/master/mysql-few-databases/docker/provision/mysql/init
但是我在执行时遇到了错误 docker-compose -f docker-compose.yml 向上
原因:com.mysql.cj.core.exceptions.CJCommunicationsException:通信链路故障 cth-docker-container_1 | cth-docker-container_1 |最后一个成功发送到服务器的数据包是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。 cth-docker-container_1 |在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) cth-docker-container_1 |在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) cth-docker-container_1 |在 java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) cth-docker-container_1 |在 java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) cth-docker-container_1 |在 com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:54) cth-docker-container_1 |在 com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:93) cth-docker-container_1 |在 com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:133) cth-docker-container_1 |在 com.mysql.cj.core.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:149) cth-docker-container_1 |在 com.mysql.cj.mysqla.io.MysqlaSocketConnection.connect(MysqlaSocketConnection.java:83) cth-docker-container_1 |在 com.mysql.cj.mysqla.MysqlaSession.connect(MysqlaSession.java:122) cth-docker-container_1 |在 com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:1754) cth-docker-container_1 |在 com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1624) cth-docker-container_1 | ...省略了125个常用框架 cth-docker-container_1 |引起:java.net.UnknownHostException:mysql-standalone cth-docker-container_1 |在 java.base/java.net.InetAddress$CachedAddresses.get(InetAddress.java:797) cth-docker-container_1 |在 java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1505) cth-docker-container_1 |在 java.base/java.net.InetAddress.getAllByName(InetAddress.java:1364) cth-docker-container_1 |在 java.base/java.net.InetAddress.getAllByName(InetAddress.java:1298) cth-docker-container_1 |在 com.mysql.cj.core.io.StandardSocketFactory.connect(StandardSocketFactory.java:179) cth-docker-container_1 |在 com.mysql.cj.mysqla.io.MysqlaSocketConnection.connect(MysqlaSocketConnection.java:57) cth-docker-container_1 | ...省略了128个常用帧
如果我设置了错误的环境或我的方式不正确,我会卡住并且没有得到您的任何建议,我一定会帮助我 谢谢!
【问题讨论】:
-
请查看mysql镜像官方文档。你用错了。
MYSQL_USER= root将与在 db 初始化时创建的默认 root 用户冲突。使用不同的用户名或不创建默认用户(删除用户/密码的环境变量)。检查您的数据库容器日志:我 99.9% 确定 init 进程要么死了,要么无限循环,并且您的数据库没有运行您认为的数据。见this other answer。 -
注意:以上可能不是唯一的问题,但它肯定在你的路上
标签: docker spring-mvc docker-compose application.properties