我正在使用docker容器运行应用程序,尝试连接mysql主机
mysql主机是localhost 和我的docker容器在localhost:8080上运行
这是我的config.yml文件
database:
driverClass: com.mysql.cj.jdbc.Driver
# TODO: if running locally without k8s, change the service url to your localhost
url: jdbc:mysql://localhost:3306/locations?useSSL=false
user: root
password: root
maxWaitForConnection: 1s
validationQuery: "SELECT now()"
validationQueryTimeout: 3s
minSize: 8
maxSize: 32
checkConnectionWhileIdle: false
evictionInterval: 10s
minIdleTime: 1 minute
checkConnectionOnBorrow: true
当我尝试访问我的应用时,它总是给我异常
ERROR [2018-02-08 18:16:56,508] org.apache.tomcat.jdbc.pool.ConnectionPool: Unable to create initial connections of pool.
! java.net.ConnectException: Connection refused (Connection refused)
我尝试了很多解决方案而不是谷歌:D,但没有什么对我有用!
我的java连接器版本:
编译组:'mysql',名称:'mysql-connector-java',版本:'8.0.9-rc'
任何人都可以帮忙! 我也在ubuntu上运行,
当我尝试从IDE运行我的应用程序时,它运行良好,但是从docker容器中提供异常!
答案 0 :(得分:0)
如果您的mysql作为docker容器运行,那么您可能需要将docker容器与mysql容器链接:
docker run --link mysql_container_name:db your_application
然后,您可以修改您的jdbc网址以说明jdbc:mysql://db:3306/locations?useSSL=false
。这是因为您已将两个docker容器链接在一起,并在docker中将db
建立为指向mysql容器的主机名。
如果你的mysql数据库没有在docker容器中运行,而是在本地机器上运行,那么它会变得有点复杂。如果您不在Linux机器上,那么您的Docker容器在技术上运行在Docker的虚拟机中。因此,从容器的角度来看,localhost
是docker虚拟机,而不是运行MySQL的物理机器。
如果是这种情况,一个简单的解决方法是在您的jdbc网址中使用您计算机的网络IP地址而不是localhost
。假设您机器的IP地址为192.168.0.10
:
jdbc:mysql://192.168.0.10:3306/locations?useSSL=false