连接到在Docker容器上运行的MySQL

6
我正在尝试在Docker上运行MySQL服务器(使用Docker Toolbox for Mac安装),并从运行OS X Yosemite的计算机访问它。 官方仓库的文档没有说明如何从docker主机外部连接!我已经按照官方仓库创建了一个容器。
$ docker pull mysql
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
$ docker inspect CONTAINER_ID

我得到了IP地址(172.17.0.1),但是当我ping它时,我看到超时错误!那么连接到运行的MySQL服务器的适当方法是什么?

1个回答

5
它的意思是:
这个镜像暴露了标准的MySQL端口(3306),所以通过容器链接,MySQL实例可以被其他应用容器使用。
首先,请确保您的docker运行时映射了该端口:-p 3306:3306 (否则从Linux主机访问Dockerfile中公开的端口将无法访问)。
然后,您需要:
  • either to add a port forwarding rule to your VirtualBox VM, and access 127.0.0.1:3306,

      VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port3306,tcp,,3306,,3306";
    
  • or access the boot2docker VM IP address $(boot2docker ip), using port 3306.

讨论后,发现在末尾添加端口映射是错误的:
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest -p 3306:3306

这行代码不起作用是因为"-p 3306:3306"只被解释为传递给ENTRYPOINT命令的参数。

这个可以工作(意思是docker ps -a显示容器状态为"运行中"而不是"已停止"):

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

那么正确的应该是 root@127.0.0.1:3306 或者 root@$(docker-machine ip):3306


2
我没有使用boot2docker,而是使用了新的Docker Toolbox。 - bachr
@elsoufy 的想法是一样的:仍然存在一个VM。此外,如果端口没有在docker运行时映射,它也无法访问。 - VonC
有一个使用VBoxManage的,但我认为它不起作用,我在vagrant上运行另一个mysql,客户端连接到这个而不是docker上的那个! - bachr
@elsoufy 然后尝试连接到 $(boot2docker ip):3306(如果您的 docker run 使用了 -p 3306:3306)。使用 toobox,它可能是 $(toolbox ip) - VonC
1
我曾遇到类似的问题,而且我能够通过底部的docker命令解决问题。"docker run --name db -d -e MYSQL_ROOT_PASSWORD=yourPassword -p 3306:3306 mysql:latest" - thread-game
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接