2015-09-02 263 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

相關問題