如何将使用 docker 创建的 MySQL 连接到另一个端口(不是端口 3306)?
Posted
技术标签:
【中文标题】如何将使用 docker 创建的 MySQL 连接到另一个端口(不是端口 3306)?【英文标题】:How to connect to MySQL created with docker to another port (not port 3306)? 【发布时间】:2020-06-07 05:02:41 【问题描述】:我已经在我的电脑上安装了 mysql,所以端口 3306 已经很忙了。这就是为什么我必须使用与 3306 不同的端口的原因。我希望能够在不使用 docker 命令的情况下将我的机器连接到我的 docekr 实例,这样我就可以使用我的应用程序连接到该实例(Spring web app )。
我使用的 Docker 命令:
docker run --name jt-mysql -e MYSQL_ROOT_PASSWORD=password -p 3307:3307 -d mysql
然后我尝试通过以下方式连接到那个距离:
mysql --user=root -P 3307 -p
在这种情况下,我收到以下错误:
ERROR 1045 (28000): Access denied for user 'root'@'localhost'(使用 密码:是)
请注意,如果我尝试使用安装在我的电脑上的实例,它可以工作,使用 with:
mysql --user=root -P 3306 -p
关于我的 docker 实例使用的其他信息:
docker ps
我明白了:
f52a94aa63da mysql "docker-entrypoint.s…" 4 分钟前 上升 4 分钟 3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp jt-mysql
在我的 docker 映像中带有状态(使用 docker 命令输入)我得到:
Connection id: 11
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.19 MySQL Community Server - GPL
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /var/run/mysqld/mysqld.sock
Binary data as: Hexadecimal
Uptime: 16 min 50 sec
使用 env 命令:
HOSTNAME=f52a94aa63da
MYSQL_ROOT_PASSWORD=password
PWD=/
HOME=/root
MYSQL_MAJOR=8.0
GOSU_VERSION=1.7
MYSQL_VERSION=8.0.19-1debian9
TERM=xterm
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env
【问题讨论】:
【参考方案1】:在 3306 端口启动 MySQL 容器并在 3307 端口公开的命令
docker container run -d --name=LocalMySQLDB -p 3307:3306 -e MYSQL_ROOT_PASSWORD=password mysql
或
docker run -d --name=LocalMySQLDB -p 3307:3306 -e MYSQL_ROOT_PASSWORD=password mysql
上述命令在“LocalMySQLDB”容器中启动 MySQL 数据库服务器
现在要连接到容器化的 mysql 实例,请使用以下附加命令
mysql -h 127.0.0.1 -uroot -P 3307 -ppassword
出于测试目的,我已经在本地机器上尝试了很多次。它肯定也适合你。 如果它不适用于您的情况,请发表评论。
【讨论】:
【参考方案2】:当你运行docker容器时,请尝试在最后加上这个参数。
docker run --name jt-mysql -e MYSQL_ROOT_PASSWORD=password -p 3307:3306 -d mysql --network host
【讨论】:
你的意思是不是-p 3307:3307
我认为你的命令会将容器端口3307暴露给全神贯注的3306。
docker里面mysql的端口是3306,所以它把docker容器的3306端口暴露给你本地的3307端口
@RobertB。这样容器只运行几秒钟然后停止。当我做 docker start jt-mysql 它是一样的。【参考方案3】:
使用以下命令启动 Docker 容器:
docker run -d -p 3307:3306 --name mysql_server -e MYSQL_ROOT_PASSWORD=123456 mysql
使用以下命令从主机连接到容器:
mysql -u root -P 3307 --protocol=tcp -p
【讨论】:
我以这种方式收到此错误:ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0以上是关于如何将使用 docker 创建的 MySQL 连接到另一个端口(不是端口 3306)?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Docker 连接 php-apache 和 MySQL?
如何将 mysql 工作台连接到在 docker 中运行 mysql?