无法从主机连接到Docker容器中的mysql

无法从主机连接到Docker容器中的mysql,mysql,docker,Mysql,Docker,我在Mac笔记本电脑上运行Docker mysql容器。以前,我可以通过mysql客户端从主机操作系统连接到它。然而,不知怎的,它被删除了,现在在我重新创建它之后,我无法再连接到它。我已经搜索了几十个类似的问题,但我完全被难住了 下面是我如何创建它的: docker container run --name mysql-zhxw-dev -p 3306:3306 --expose=3306 -v zhxw-local-db-:/var/lib/mysql -e MYSQL_ALLOW_EMPTY

我在Mac笔记本电脑上运行Docker mysql容器。以前,我可以通过mysql客户端从主机操作系统连接到它。然而,不知怎的,它被删除了,现在在我重新创建它之后,我无法再连接到它。我已经搜索了几十个类似的问题,但我完全被难住了

下面是我如何创建它的:

docker container run --name mysql-zhxw-dev -p 3306:3306 --expose=3306 -v zhxw-local-db-:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql:5.7.30
每次从我的主机操作系统运行mysql-u root-h 127.0.0.1时,我都会得到:

ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)
我可以登录到容器,并从中连接到mysql:

docker container exec -it mysql-zhxw-dev bash
mysql -u root <-- connects fine
docker container exec-it mysql zhxw dev bash

mysql-u root我在docker中有一个用mysql编写的模板,也许它可以帮助你

docker-compose.yml

version: "3.2"
services:
  mysql:
    image: mysql:latest
    ports:
      - "3306:3306"
    volumes:
      - /path-persistent-volumen:/var/lib/mysql/
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=password

我有一个用mysql编写的docker模板,也许它可以帮助你

docker-compose.yml

version: "3.2"
services:
  mysql:
    image: mysql:latest
    ports:
      - "3306:3306"
    volumes:
      - /path-persistent-volumen:/var/lib/mysql/
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=password

原来docker一定是处于一种奇怪的状态。重新启动我的笔记本电脑解决了这个问题

在重新启动之前,我尝试重新启动Docker桌面,但没有解决问题。只有完全重新启动才能解决此问题

我注意到的一件事是在重新启动之前,当我运行
docker container ls-a
时,除了我试图使用的一个mysql容器外,没有任何容器。我想我可能从一些清理命令中删掉了它们。重启后,我所有的容器都回来了


我最近确实使用自制软件升级了docker,所以可能这让它处于一种奇怪的状态。

结果表明docker一定处于一种奇怪的状态。重新启动我的笔记本电脑解决了这个问题

在重新启动之前,我尝试重新启动Docker桌面,但没有解决问题。只有完全重新启动才能解决此问题

我注意到的一件事是在重新启动之前,当我运行
docker container ls-a
时,除了我试图使用的一个mysql容器外,没有任何容器。我想我可能从一些清理命令中删掉了它们。重启后,我所有的容器都回来了


我最近确实使用自制软件升级了docker,因此可能会使它处于一种奇怪的状态。

此错误通常是由于主机上的端口相关问题引起的

试试这些东西:

  • 检查容器的日志
  • 使用
    -a
    标志以连接模式启动容器
  • 运行
    docker inspect mysql zhxw dev
    并检查HostPort和HostIp,尝试发现异常情况
  • 您还可以将端口映射中的主机端口更改为其他类型,如
    -v 3308:3306
  • 此外,这可能会有所帮助


    另外,我已经复制并运行了您发出的相同命令,并且运行正常。

    此错误通常是由于主机上的端口相关问题引起的

    试试这些东西:

  • 检查容器的日志
  • 使用
    -a
    标志以连接模式启动容器
  • 运行
    docker inspect mysql zhxw dev
    并检查HostPort和HostIp,尝试发现异常情况
  • 您还可以将端口映射中的主机端口更改为其他类型,如
    -v 3308:3306
  • 此外,这可能会有所帮助


    另外,我已经复制并运行了您发出的相同命令,并且运行正常。

    您是否尝试过在Docker容器的IP地址上连接?使用
    docker inspect | grep inet
    查找IP地址。我尝试了
    docker container inspect mysql zhxw dev | grep inet
    ,但没有包含“inet”的行。因此我搜索了“ip”,在
    NetworkSettings
    对象中有几个
    IPAddress
    条目。(都是同一个IP。)我试过那样连接(
    mysql-u root-h 172.17.0.2
    ),但它根本没有响应-只是超时了。你试过在Docker容器的IP地址上连接吗?使用
    docker inspect | grep inet
    查找IP地址。我尝试了
    docker container inspect mysql zhxw dev | grep inet
    ,但没有包含“inet”的行。因此我搜索了“ip”,在
    NetworkSettings
    对象中有几个
    IPAddress
    条目。(都是同一个IP。)我试着用那种方式连接(
    mysql-u root-h 172.17.0.2
    ),但它根本没有响应-只是超时了。我试图用docker来完成这项工作,而不是docker compose,因为这只是为了本地开发,我已经有了一个docker-compose.yml文件用于这个项目的完整环境。我正试图用docker来做这件事,而不是用docker-compose,因为这只是为了本地开发,我已经有了一个docker-compose.yml文件用于这个项目的完整环境。谢谢-实际上我已经解决了。我的码头工人处于某种崩溃状态。重新启动修复了它。(我发布了一个以“原来docker一定处于一种奇怪的状态……”开头的答案)谢谢——事实上我已经猜到了。我的码头工人处于某种崩溃状态。重新启动修复了它。(我发布了一个以“原来docker一定处于一种奇怪的状态……”开头的答案)