【已解决】Docker-compose部署Mysql5.7报错,各位大佬能帮看一下吗?

ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)
密码不能带有这种乱七八糟的字符:)(!$

docker-compose.yaml文件内容如下:

version: '3.3'
services:
    trading_system_redis:
        container_name: trading_system_redis
        restart: always
        image: redis:latest
        ports:
            - "6379:6379"
    trading_system_mysql:
        container_name: trading_system_mysql
        restart: always
        image: mysql:5.7
        volumes:
            - /home/snakejohn/minio/db_data:/var/lib/mysql
            - /home/snakejohn/minio/db_config:/etc/mysql/conf.d
        ports:
            - "3214:3306"
        environment:
            MYSQL_ROOT_PASSWORD: xxxxx
            MYSQL_DATABASE: trading_system
        command:
            --max_connections=1000
            --character-set-server=utf8mb4
            --collation-server=utf8mb4_general_ci
            --default-authentication-plugin=mysql_native_password
            --explicit_defaults_for_timestamp=true
            --privileged=true
    minio:
        container_name: trading_system_minio
        restart: always
        image: minio/minio
        ports:
            - "9000:9000"
        environment:
            MINIO_ACCESS_KEY: minio
            MINIO_SECRET_KEY: minio123
        volumes:
            - /home/snakejohn/minio/minio_data:/data
            - /home/snakejohn/minio/minio_config:/root/.minio
        command: server /data --console-address ":9000" --address ":9090"
        privileged: true
    trading_system:
        container_name: trading_system
        restart: always
        image: registry.cn-shanghai.aliyuncs.com/fengzx120/trading_system:latest
        depends_on:
            - trading_system_mysql
            - trading_system_redis
            - minio
        environment:
            MYSQL_IP: localhost
            MYSQL_PORT: 3214
            MYSQL_USER: root
            MYSQL_PASSWORD: xxxxx
            MINIO_IP: 192.168.1.30
        network_mode: "host"
    trading_system_frontend:
        container_name: trading_system_frontend
        restart: always
        image: registry.cn-shanghai.aliyuncs.com/fengzx120/trading_system_frontend:latest
        depends_on:
            - trading_system
        network_mode: "host"

额 这错误是部署时候的?

不是,是连接数据库时候报的错,容器内部登录mysql也会报错

那这个是容器内还是容器外连接,容器外连接的时候带端口号了吗

密码认证不对,确认一下密码。如果不行,清空MySQL挂载路径里数据,MYSQL_PASSWORD: 后面密码字符上加上引号 “xxxx” 试试

mysql的root有2个账号,一个是root@localhost,一个是root@%

忘记默认是不是存在root@%了,但是root@localhost是一定存在的,你进到容器里面,用mysql命令行连连看是否可以成功

docker exec -it trading_system_mysql /bin/bash

mysql -uroot -pxxxxx

一般是可以连上的,剩下的就是你要查一下怎么把root@%设置上密码,或者是默认没有root@%,就添加一个,并给上权限

如果你在容器里也出错,你试试docker compose down,(也把数据卷删掉)再重新部署,没记错的话,root密码只在第一次运行的时候会生效,如果你部署了以后又改了环境变量重新部署,是不生效的

version: '3.1'
services:
  mysql:
    image: mysql:5.7
    container_name: mysql5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql
      - ./log:/var/log/mysql
      - ./conf:/etc/mysql/conf.d

然后再conf目录下建一个my.cnf

[client]
default-character-set=utf8mb4
 
[mysql]
default-character-set=utf8mb4
 
[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
lower_case_table_names=1

密码是对的,我试一下加引号

但是报错信息里面有using password:YES的字样

我待会回去了试试,谢谢

你有部署过,然后又修改了环境变量再部署吗

有好几次重新部署过

你部署之后再改环境变量中的密码,再部署,新密码不会生效,因为你的数据卷没变,数据库使用的还是你第一次设置的密码。

好像是一开始设置了一个密码,后面改的另一个密码

大佬,请问这种情况怎么办?是要把文件全删除后重新部署吗?还是要删除镜像

方法已经给你了啊,删掉你的数据卷重新部署吧,你可以只删除mysql的数据卷,

我删了volumes里面的数据,部署后登录还是报错。。。。

原因找到了。密码使用了特殊字符。。。。。