Java 如何使用jdbc从eclipse连接到docker容器
我已经从docker hub下载了docker imageJava 如何使用jdbc从eclipse连接到docker容器,java,eclipse,docker,jdbc,Java,Eclipse,Docker,Jdbc,我已经从docker hub下载了docker imagemysql/mysql服务器,并使用以下命令运行了一个容器: docker-run--name-e MYSQL\u ROOT\u PASSWORD=-d MYSQL:MYSQL服务器 我使用命令docker exec-it mysql-uroot-p以交互模式打开了mysql,创建了一个数据库、表,并使用以下命令将其所有权限授予我的机器ip: mysql> create user 'uname'@'<machine ip>
mysql/mysql服务器
,并使用以下命令运行了一个容器:
docker-run--name-e MYSQL\u ROOT\u PASSWORD=-d MYSQL:MYSQL服务器
我使用命令docker exec-it mysql-uroot-p
以交互模式打开了mysql
,创建了一个数据库、表,并使用以下命令将其所有权限授予我的机器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;
mysql>创建由“pwd”标识的用户“uname@”;
mysql>创建数据库;
mysql>在上授予所有权限。*对“”标识的@“”进行“uname”;
mysql>刷新权限;
我打开了eclipse,使用数据源浏览器创建了一个db连接,并使用jdbc:mysql://:3306/dbname
进行连接。当我测试我的连接时,它会说:
连接超时
有人能告诉我哪里出了错吗?在docker for Mac中,您不能通过容器ip访问服务
在docker for Windows中,您可以访问容器ip,但需要配置防火墙
执行此操作的最佳和最安全的方法是使用-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
还有
如果这不起作用,请确保您的代理允许您接受3306上的连接。我在谷歌上搜索了相同的问题,发现了这个问题
因此,如果您浏览该线程,您将发现它将以您希望的方式在Linux上运行,方法是使用容器IPlocalhost:3306
,请清理您的问题并确保其格式正确。请注意,您没有在docker运行中指定端口映射,因此无法访问。修复了语法、格式、,和标点问题。如何在mac中通过容器ip访问服务?我尝试了与您提到的相同的过程,但仍然获得连接超时容器ID映像命令创建状态端口名称16b0bd5bee9e mysql/mysql服务器“/entrypoint.sh my…”2小时前上升2小时(健康)0.0.0.0:3306->3306/tcp,33060/tcp数据库即使容器已启动并正在运行,我也无法访问我已尝试使用localhost和容器ip,但在这两种情况下都显示超时。出现以下错误无法连接到新的MySQL。创建到新MySQL的SQL模型连接时出错。(错误:通信链路故障成功发送到服务器的最后一个数据包是0毫秒前。驱动程序尚未从服务器收到任何数据包。)通信链路故障当我尝试ping我的容器ip时,它给出了以下错误ping 172.17.0.2 ping 172.17.0.2(172.17.0.2):56 icmp的数据字节请求超时\u seq 0 icmp的请求超时\u seq 1是否可以从存在eclipse的同一台计算机访问容器?是的,因为docker容器有自己的IP,所以您可以使用docker inspect命令,它也可以工作。
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