代码之家  ›  专栏  ›  技术社区  ›  Paul

Docker Compose-创建并连接到MySQL容器

  •  0
  • Paul  · 技术社区  · 7 年前

    在Docker中很难处理MySQL。我已经使用docker compose运行了容器,但是我无法通过任何工具(如phpmyadmin、workbench或tableplus)连接到数据库。

    我已经直接连接到运行容器并运行

    mysql -uroot -p
    

    并输入了我已通过的根密码,但此操作失败,并出现以下错误:

    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    

    这是我的docker-compose.yml文件:

    version: '3'
    
    services:
        db:
        image: mysql
        restart: always
        environment:
          MYSQL_DATABASE: quotes
          MYSQL_USER: quotes
          MYSQL_PASSWORD: P@KhzKZp)56sU8n+
          MYSQL_ROOT_PASSWORD: +\VrLG*<t5sq[\\shR29u#n~A3^Jp*
        ports:
          - '3306:3306'
        volumes:
          - /private/mdbdata/quotes:/etc/mysql/conf.d
        expose:
          - '3306'
    

    已经在这上面好几天了…希望有人能帮忙!

    3 回复  |  直到 7 年前
        1
  •  0
  •   MikeBFromPDX    7 年前

    我认为您的容器正在“localhost”上查找MySQL服务器,这将不起作用。容器的localhost是容器本身,而不是运行它的主机。

    您应该能够使用主机IP地址访问MySQL服务器。

        2
  •  0
  •   Milan Velebit    7 年前

    您尝试过提供的解决方案吗 here 是吗?基本上,如果您以前运行过一个容器,那么您必须显式地清除它,因为Docker跟踪根passwd(via )来自以前实例化的容器。这种情况发生在很多工具中,它不是MySQL容器独有的。一个简单的 docker-compose rm -v 应该够了,然后把你的容器拿上来。这基本上从磁盘上删除了旧卷, 删除所有数据 来自上一个容器实例化。

    你也可以打电话给 docker ps ,找到容器并执行 docker rm -v <CONTAINER_NAME> . 之后把你的容器拿上来。

        3
  •  0
  •   Paul    7 年前

    终于解决了这个问题…我必须从密码字符串中删除所有特殊字符。

    我厌倦了在字符串周围添加单引号和双引号,以查看是否允许使用特殊字符,但这仍然失败。密码必须是字母数字。