如何使用jdbc

时间:2017-11-20 16:33:41

标签: java eclipse docker jdbc

我已从docker hub下载了docker image mysql/mysql-server并使用以下命令运行了一个容器:

docker run --name <name of my container> -e MYSQL_ROOT_PASSWORD=<my pwd > -d mysql:mysql-server

我已使用命令mysql以交互模式打开docker exec -it <name of my container> mysql -uroot -p并创建了一个数据库,表,并使用以下命令将其所有权限授予我的机器ip:

mysql> create user 'uname'@'<machine ip>' identified by 'pwd'; 
mysql> create database <dbname>; 
mysql> grant all privileges on <dbname>. * to 'uname'@'<machine ip>' identified by '<pwd>';  
mysql> flush privileges; 

我打开了我的eclipse并使用data source explorer创建了一个数据库连接,并使用jdbc:mysql://<container ip>:3306/dbname连接。当我测试我的连接时,它说:

  

连接超时

任何人都可以建议我犯错的地方吗?

2 个答案:

答案 0 :(得分:0)

在Docker for Mac中,您无法通过容器IP访问服务。

在Docker for Windows中,您可以访问容器ip,但需要配置防火墙。

执行此操作的最佳和最安全的方法是使用-p选项 port-mapping

docker run --name <name of my container> -e MYSQL_ROOT_PASSWORD=<my pwd > -d -p 3306:3306 mysql:mysql-server

您的数据库将位于jdbc:mysql://localhost:3306/dbname

我建议使用官方图片(只是 mysql ),而不是手动创建数据库。

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=dbname -e MYSQL_USER=user -e MYSQL_PASSWORD=password -p 3306:3306 -d mysql

您的连接也会在jdbc:mysql://localhost:3306/dbname

如果这不起作用,请确保您的代理允许您接受3306上的连接。

答案 1 :(得分:0)

我在谷歌搜索了同样的问题,我发现了这个access containers by internal IPs 172.x.x.x

因此,如果您浏览该主题,您会发现它将以您希望的方式使用容器IP localhost:3306