如何连接MySQL客户端和在Docker中运行的服务器

我第一次使用Docker。 我正在尝试使用我的Navicat客户端连接基于docker的MySQL。 如何获得dockerIP,然后用它来连接? 这里有一些细节:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b984b6659d20 mysql:5.7 "docker-entrypoint.sh" 8 minutes ago Up 7 minutes 3306/tcp myre_mysql_run_1 d34d8974912c myre_php-apache-engine "/usr/local/bin/entry" 20 hours ago Up 7 minutes 80/tcp myre_php_apache_engine_dev 981c2a7fa83b mysql:5.7 "docker-entrypoint.sh" 20 hours ago Up 47 seconds 3306/tcp myre_mysql_dev 472531e09d08 jwilder/nginx-proxy "/app/docker-entrypoi" 20 hours ago Up 7 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nginx_proxy 

如果你需要从外面访问mysql容器。 比你需要在服务器的端口上映射容器端口(使用-p )。

 docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_USER=test -e MYSQL_PASSWORD=test -d mysql:latest 

现在,您可以使用服务器的IP +端口连接到您的容器。 在我的情况下,我在一个VLAN。 我的服务器的IP是192.168.140.30。 所以,例如,当我SSH我的服务器使用该IP。 现在我已经将我的容器的端口映射到服务器的端口(使用-p 3306:3306 ,这意味着:将我的容器的端口3306映射到服务器的端口3306(所以我可以使用服务器IP来连接)。

在这里输入图像说明 在这里输入图像说明

如果您需要使用客户端连接到Docker容器中的MySQL,则需要与主机进行端口映射。

我看到你的MySQL容器没有使用将容器端口映射到主机端口,所以你不能使用MySQL客户端来连接MySQL服务器。

你可以使用-p参数指定端口映射。 例如,如果您需要使用端口3306连接到MySQL服务器,请使用以下命令创buildMySQL容器。 PS:你需要改变一些设置为下面的命令。

 docker run --name container-name -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=database-name -e MYSQL_USER=user -e MYSQL_PASSWORD=password mysql:5.7