我正在运行MySQL Docker映像并创建数据库和表。使用以下命令启动容器:
docker run --network host -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql/mysql-server
Spark在主机上运行,所以我想将Spark中的数据写入容器中运行的数据库中。
但是连接不成功,并且出现异常:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
答案 0 :(得分:0)
您可以尝试以下两种解决方案:
检查您的java文件中的连接URL是否正确。
检查您的容器是否接受不是容器本地主机的连接:
转到您的cmd并输入容器:
handleBackButton = () => {
if(Navigation.getCurrentRoutes().size()>1) {
return true; // addEventListener listens for the native hardware back button press and will ignore it
}
... customLogic
return false; // will execute the native back press (and exit the app)
}
docker exec -it containerID /bin/bash
内安装vim apt install vim
vim /etc/mysql/mysql.conf.d/mysqld.cnf
或使其收听0.0.0.0 希望获得帮助。
答案 1 :(得分:0)
正如Schwarz54在回答中提到的那样,这可能是主机问题。
我通常在使用MYSQL_HOST
参数初始化容器时将其传递。
docker run --name mysql_5.7 -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root1234 -e MYSQL_HOST=localhost mysql:5.7
我认为,如果您在主机网络上运行端口,则不必映射端口。
docker run --name mysql_5.7 -d --network host -e MYSQL_ROOT_PASSWORD=root1234 -e MYSQL_HOST=localhost mysql:5.7
如果要使用-v
标志在容器重新启动期间保留数据,可以将本地目录安装到本地容器:
mkdir -p /Users/projects/data/mysql5.7
将此目录安装在/var/lib/mysql
的容器中
docker run --name mysql_5.7 -d --rm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root1234 -e MYSQL_HOST=localhost -v /Users/projects/data/mysql5.7:/var/lib/mysql mysql:5.7