我已从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
连接。当我测试我的连接时,它说:
连接超时
任何人都可以建议我犯错的地方吗?
答案 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
。