从本地主机连接到 Docker MySQL 容器?

我运行了一个 docker mysql 映像,下面是 docker-compose. yml 文件的样子:

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

这样挺好的。

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

澄清:

  • 我有一台装了 Docker 的苹果笔记本电脑
  • 我有一个带 mysql 的码头容器
  • 我想从我的 Macbook 上的终端连接到在上述容器上运行的 mysql 实例
  • 我不想用 docker命令来实现这一点。相反,我希望直接从终端使用 mysql客户机(而不需要通过一个 Docker 容器进行挖掘)。

我没有在本地运行 MySQL,所以端口3306应该是打开的并且可以使用。

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

127427 次浏览

Connect to MySQL via {host ip}:3306 since you've exposed the internal port to your host as 3306. If you need to access the MySQL CLI tools you will need to go docker exec -it mycontainer bash this will place you inside the container to access the tools installed with MySQL if you do not have them installed locally on the host o/s.

Using docker-compose up

Since you published port 3306 on your docker host, from that host itself you would connect to 127.0.0.1:3306.

Using docker-compose run

In that case the port mapping section of the docker-compose.yml file is ignored. To have the port mapping section considered, you have to add the --service-ports option:

docker-compose run --service-ports db

Additional note

Beware that by default, the mysql client tries to connect using a unix socket when you tell it to connect to localhost. So do use 127.0.0.1 and not 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)

I got it!! The answer is to use the --service-ports option when running docker-compose:

docker-compose run --service-ports db (the original docker-compose.yml file works fine)

Thanks to all for the help!

Your yml file looks good.

You can directly connect docker container directly as it already mapped with local port 3306. Just goto terminal and run

mysql -h 127.0.0.1 -u root -p

Note: you must have access to mysql command line. If mysql command show an error, check '/usr/local/mysql/bin' other wise you can not connect to mysql server. In other word you must have mysql client on your machine.

If your Docker MySQL host is running correctly you can connect to it from local machine, but you should specify host, port and protocol like this:

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

Because you are running MySQL inside Docker container, socket is not available and you need to connect through TCP. Setting "--protocol" in the mysql command will change that.

this worked for me.

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

A simple way to login to MySQL inside a Docker image is:

sudo docker exec -it <CONTAINER_ID> mysql -u root -p

for mySQL's root account by default password is not set, its BLANK, just press enter/return key, unless you have changed root password.

On successful execution, above command gives you mysql prompt.

Cheers!

You can just Use --network="host" in your docker run command, then 127.0.0.1 or localhost in your docker container will point to your docker host.

docker run --network="host" -p 8080:8080 <your-docker-Image>