2015-09-02 266 views
29

我有一个码头工人mysql的图像运行,以下是搬运工,compose.yml文件的样子:从本地连接到Docker MySQL容器?

db: 
    image: mysql 
    environment: 
    MYSQL_ROOT_PASSWORD: "" 
    MYSQL_ALLOW_EMPTY_PASSWORD: yes 
    ports: 
    - "3306:3306" 

这工作得很好。

我的问题是:我如何连接到从我的主机(我的MacBook)上的命令行mysql客户端上运行该容器的MySQL实例?

澄清:

  • 我有一个码头工人一台MacBook安装
  • 我有一个码头工人容器与MySQL
  • 我想连接到从终端对上述容器上运行的MySQL实例我的macbook
  • 我不想用户docker命令使这成为可能。相反,我想直接从终端使用mysql客户端(无需通过Docker容器进行隧道传输)。

我没有MySQL本地运行,所以端口3306应该打开并准备使用。

我使用启动容器的命令是:docker-compose run

+0

这看起来尤其重要:http://serverfault.com/questions/688513/cant-access-mysql-docker-container-from-the-host – Caleb

+0

如何搬运工在MacBook安装?码头工具箱,boot2docker或kitematic? – Thomasleveil

+0

'boot2docker'码头工具箱不可靠。我在他们的github上打开了问题,如果/当它变得更加稳定时,我会使用它,但现在'boot2docker'正在管理虚拟机,并且工作正常。 – Caleb

回答

41

使用docker-compose up

由于您在搬运工主机上发布端口3306,从主机本身,你会连接到127.0.0.1:3306

使用docker-compose run

在那种情况下docker-compose.yml文件的端口映射部分被忽略。有端口映射部认为,你必须添加--service-ports选项:

docker-compose run --service-ports db 

附加说明

要注意的是在默认情况下,MySQL客户端尝试使用Unix套接字当你告诉它连接到连接到localhost。所以一定要使用127.0.0.1,而不是localhost

$ mysql -h 127.0.0.1 -P 3306 -u root 

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

$ mysql -h localhost -P 3306 -u root 

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

+0

感谢您的提示。我尝试使用'127.0.0.1'(和'192.168.59.103'),既没有工作:( – Caleb

+0

任何其他的想法?@Thomasleveil – Caleb

+0

对不起,我从来没有使用boot2docker我也许https://github.com/docker/docker/issues/4007将帮助 – Thomasleveil

-1

通过{主机IP}连接到MySQL:3306因为你已经暴露内部端口连接到主机3306。如果您需要访问MySQL CLI工具,你需要去docker exec -it mycontainer bash这将把你放在容器内,以访问MySQL安装的工具,如果你没有在主机上安装它们。

8

我明白了!答案是在运行时使用--service-ports选项docker-compose

docker-compose run --service-ports db(原始码头组成。yml文件工作正常)

感谢所有的帮助!

0

你的yml文件看起来不错。

您可以直接直接连接泊坞窗的容器,因为它已经与本地端口3306 就转到终端映射运行

mysql -h 127.0.0.1 -u root -p 

注意:您必须能够访问mysql命令行。如果mysql命令显示错误,请检查'/ usr/local/mysql/bin',否则您无法连接到mysql服务器。换句话说,你的机器上必须有mysql客户端。

0

如果您的码头工人的MySQL主机运行正常,你可以从本地机器连接到它,但你应该指定主机,端口和协议是这样的:

mysql -h localhost -P 3306 --protocol=tcp -u root 

因为你是泊坞窗容器中运行的MySQL,插座不可用,您需要通过TCP进行连接。在mysql命令中设置“--protocol”会改变它。

0

这为我工作。

/usr/local/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root -p 
+0

您能否更详细地解释它到底如何工作以及它在哪里使用? –

+0

这就是安装mysql的位置。所以命令“/ usr/local/mysql/bin/mysql”将运行mysql可执行文件。只是在自己的mysql不会在某些情况下工作,因为它取决于你如何在你的mac上安装mysql – Swannie

+0

我在通过docker-compose运行的mysql 5.7容器上使用它,并使用docker-machine与docker swarm一起使用它 – Swannie

相关问题