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

Docker Compose-创建并连接到mysql容器,mysql,docker,docker-compose,containers,Mysql,Docker,Docker Compose,Containers,在docker中很难掌握mysql。我已经使用docker compose运行了容器,但我无法通过任何工具(如phpmyadmin、workbench或tableplus)连接到数据库 我已直接连接到正在运行的容器并运行 mysql -uroot -p 并输入了我已传递的根密码,但此操作失败,出现以下错误: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 这是我的docke

在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”
服务:
db:
图片:mysql
重新启动:始终
环境:
MYSQL\u数据库:引号
MYSQL\u用户:引号
MYSQL\u密码:P@KhzKZp)56sU8n+

MYSQL\u ROOT\u密码:+\VrLG*我认为您的容器正在“localhost”上寻找一个MYSQL服务器,它将无法工作容器的localhost是容器本身,而不是运行它的主机


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

您尝试过提供的解决方案吗?基本上,如果您以前运行过一个容器,那么您必须显式地清除它,因为docker从以前实例化的容器中跟踪根密码(通过卷)。很多工具都会出现这种情况,这不是MySQL容器所独有的。一个简单的
docker-compose rm-v
就足够了,然后打开你的容器。这基本上是从磁盘中删除旧卷,从以前的容器实例化中删除所有数据


您还可以调用
docker ps
,找到您的容器并执行
docker rm-v
。之后把你的容器拿出来。

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


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

他指定它在外部也不起作用。你是对的。我误解了这个问题,以为他是想把一个容器连接到主机上运行的MySql服务器上。也许可以尝试在您的环境部分添加:“-'MYSQL\u ROOT\u HOST=%”?是的,我在访问过一个类似的站点后尝试过。感谢您的建议。如果您使用的密码高达
…R29u
,在
#
之前停止,是否有效?如果您将
MYSQL\u ROOT\u PASSWORD
值放在单引号中,是否有效?谢谢您的建议David,但这不起作用