我试图将Spring服务器连接到均在不同容器中运行的Mysql数据库,但出现此错误:
Caused by: com.mysql.cj.exceptions.WrongArgumentException: Malformed database URL, failed to parse the main URL sections.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_232]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_232]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_232]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_232]
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.17.jar!/:8.0.17]
at com.mysql.cj.conf.ConnectionUrlParser.parseConnectionString(ConnectionUrlParser.java:162) ~[mysql-connector-java-8.0.17.jar!/:8.0.17]
at com.mysql.cj.conf.ConnectionUrlParser.<init>(ConnectionUrlParser.java:136) ~[mysql-connector-java-8.0.17.jar!/:8.0.17]
at com.mysql.cj.conf.ConnectionUrlParser.parseConnectionString(ConnectionUrlParser.java:118) ~[mysql-connector-java-8.0.17.jar!/:8.0.17]
at com.mysql.cj.conf.ConnectionUrl.getConnectionUrlInstance(ConnectionUrl.java:197) ~[mysql-connector-java-8.0.17.jar!/:8.0.17]
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:196) ~[mysql-connector-java-8.0.17.jar!/:8.0.17]
... 53 common frames omitted
对于Mysql容器,我正在使用dockerhub中的最新镜像。
我猜测我尝试连接的mysql容器的IP地址是错误的,但是我不知道如何获取正确的地址。
我通过以下方式启动mysql容器:
docker run -p 3036:3036 --name mysql-container -d mysql
Spring项目中的application.properties:
database.ip = ${MYSQL_IP:mysql-container}
database.port = ${MYSQL_PORT:3306}
spring.datasource.url = jdbc:mysql://${database.ip}:${database.port}/${database.name}
后端容器:
docker run -p 8080:8080 --name backend_container --link mysql-container:mysql -d backend_container
直到现在我还没有使用Docker,如果这是一个琐碎/无聊的问题,请对不起。
我将不胜感激! :)
最佳答案
首先,我不明白为什么要对数据库进行容器化。一般来说,没有任何理由。
检查数据库主机是否具有端口转发功能,即数据库主机上的端口3036应该映射到URL或全局IP地址。 checkout ngrok,以使您不受阻碍,但是通常有一种“适当的”方式来执行此操作,该方法通常特定于您的云提供商。
编辑:您发布的代码中还有一个错字。您的docker run
命令使用端口3036,但是您的Spring代码包含database.port = ${MYSQL_PORT:3306}
。无法确定这只是此处或实际代码中的错字,但也可能在那里。
关于spring - 无法使用Docker部署Spring和MySQL应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59535599/