如何使用jdbc从eclipse连接到docker容器

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

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

我已经在交互模式下使用命令docker exec -it <name of my container> mysql -uroot -p打开了mysql ,并创build了一个数据库表,并使用以下命令将其所有权限授予了我的机器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创build一个数据库连接,并使用jdbc:mysql://<container ip>:3306/dbname 。 当我testing我的连接时,它说:

连接超时

任何人都可以提出我犯的错误吗?

我search了谷歌相同的问题,我发现了内部IP 172.xxx这个访问容器

所以,如果你通过线程你会发现它将适用于Linux的方式,你想通过使用容器IP localhost:3306

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

在Docker for Windows中,您可以访问容器IP,但是您需要configuration防火墙。

最好和最安全的方法是使用-p选项进行端口映射

 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

我build议使用官方形象(只是MySQL ),而不是手动创build数据库。

 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上的连接。