我有一个硒框架,该框架使用sql docker容器从中获取testdata。我已经在sql版本5.7中使用了基本映像来构建容器。我编写的代码曾经可以使用,但现在不再可用。这是我的代码:
public class SQLconnection {
public static Connection dataBaseConnection() throws SQLException {
System.out.println("-------- MySQL JDBC Connection Testing ------------");
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("Where is your MySQL JDBC Driver?");
e.printStackTrace();
}
System.out.println("MySQL JDBC Driver Registered!");
Connection connection = null;
try {
connection = DriverManager
.getConnection("jdbc:mysql://localhost:3306/users?useSSL=false","martijn","123");
} catch (SQLException e) {
System.out.println("Connection Failed! Check output console");
e.printStackTrace();
}
if (connection != null) {
System.out.println("You made it, take control your database now!");
} else {
System.out.println("Failed to make connection!");
}
return connection;
}
}
要构建容器,我使用了以下dockerfile:
FROM mysql:5.7
ENV MYSQL_ROOT_PASSWORD 123
ENV MYSQL_DATABASE Users
ENV MYSQL_USER martijn
ENV MYSQL_PASSWORD 123
ADD script.sql /docker-entrypoint-initdb.d
EXPOSE 3306
执行代码时出现的错误如下:
连接失败!检查输出控制台 com.mysql.cj.jdbc.exceptions.CommunicationsException:通讯 链接失败
成功发送到服务器的最后一个数据包是0毫秒前。驱动程序尚未收到来自服务器的任何数据包。
我对此很陌生,因此我们将不胜感激。
答案 0 :(得分:0)
如何启动容器?
为了使代码正常工作,您有2个主要选择:
使用network=host
启动容器以禁用创建的其他网络,并使容器加入主机的网络:
docker run -d --network=host your-sql-image
这里您不需要公开端口。
暴露容器中的端口
docker run -d -p 3306:3306 your-sql-image
人们可能会与EXPOSE
中的Dockerfile
命令混淆。它实际上没有公开任何内容(哈哈!),但更多用于通知用户您的容器将要公开的端口:
EXPOSE指令实际上并未发布端口。它 充当构建者之间的一种文档类型 图片和运行容器的人,关于哪些端口是 打算出版。在运行时实际发布端口 容器,使用docker run上的-p标志发布并映射一个或 更多端口,或使用-P标志发布所有公开的端口并映射它们 到高阶端口。
即使EXPOSE
指令中未列出端口,也可以轻松公开它们。顺便说一下,在公开端口时,通常会将它们映射到不同的端口,例如-p 10000:3306
。在Dockerfile
内部,您怎么想知道暴露时将使用的host's
端口的将来值。