如何从主机连接MySQL Docker镜像?

时间:2019-12-11 09:35:34

标签: mysql docker

我正在运行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

2 个答案:

答案 0 :(得分:0)

您可以尝试以下两种解决方案:

  1. 检查您的java文件中的连接URL是否正确。

  2. 检查您的容器是否接受不是容器本地主机的连接:

    转到您的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