• 请不要在回答技术问题时复制粘贴 AI 生成的内容
cMoon
V2EX  ›  程序员

求教 Docker Componse 部署 mysql 配置默认密码失效

  •  
  •   cMoon · Feb 1, 2023 · 3641 views
    This topic created in 1209 days ago, the information mentioned may be changed or developed.

    想自己搭一个博客( halo

    按照文档Halo Documents通过 docker componse 创建 Halo + MySQL 的实例。halo 启动报错,连接数据库 Access denied

    参考https://blog.csdn.net/qq_36493719/article/details/104246271未解决

    docker-componse.yml:

    version: "3"
    
    services:
      halo:
        image: halohub/halo:2.1.0
        container_name: halo
        restart: on-failure:3
        depends_on:
          halodb:
            condition: service_healthy
        networks:
          halo_network:
        volumes:
          - ./:/root/.halo2
        ports:
          - 6666:8090
        command:
          - --spring.r2dbc.url=r2dbc:pool:mysql://xxx:3316/halo
          - --spring.r2dbc.username=root
          # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
          - --spring.r2dbc.password= halodb
          - --spring.sql.init.platform=mysql
          # 外部访问地址,请根据实际需要修改
          - --halo.external-url=http://xxx/
          # 初始化的超级管理员用户名
          - --halo.security.initializer.superadminusername=admin
          # 初始化的超级管理员密码
          - --halo.security.initializer.superadminpassword=pwd@halo
    
      halodb:
        image: mysql:8.0.31
        container_name: halodb
        restart: on-failure:3
        networks:
          halo_network:
        command:
          - --default-authentication-plugin=mysql_native_password
          - --character-set-server=utf8mb4
          - --collation-server=utf8mb4_general_ci
          - --explicit_defaults_for_timestamp=true
        volumes:
          - ./mysql:/var/lib/mysql
          - ./mysqlBackup:/data/mysqlBackup
          - ./mysqlConf/my.cnf:/etc/mysql/my.cnf
        ports:
          - 3316:3306
        healthcheck:
          test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
          interval: 3s
          retries: 5
          start_period: 30s
        environment:
          MYSQL_ROOT_PASSWORD: halodb
          TZ: Asia/Shanghai
          MYSQL_DATABASE: halo
    
    networks:
      halo_network:
    
    34 replies    2023-02-05 22:32:20 +08:00
    cMoon
        1
    cMoon  
    OP
       Feb 1, 2023
    容器内也无法登录,修改密码没用
    Still4
        2
    Still4  
       Feb 1, 2023
    MYSQL_ROOT_HOST=%
    加上这个试试
    cMoon
        3
    cMoon  
    OP
       Feb 1, 2023
    @Still4 还是登不上
    wdssmq
        4
    wdssmq  
       Feb 1, 2023
    - --spring.r2dbc.url=r2dbc:pool:mysql://xxx:3316/halo

    ↓ ↓

    - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
    1120101929
        5
    1120101929  
       Feb 1, 2023
    --spring.r2dbc.password= halodb

    password 多了空格?
    xuyang2
        6
    xuyang2  
       Feb 1, 2023
    MySQL 报错难道就给你报个 "Access denied" ?
    Access denied **for whom** ?
    TiDao
        7
    TiDao  
       Feb 1, 2023
    1 docker ps 确认 halodb 是 running 的状态;
    cMoon
        8
    cMoon  
    OP
       Feb 1, 2023
    @wdssmq
    @1120101929 确实是多了个空格,但问题应该是出在下面 halodb 的配置,我容器内都登录不了
    TiDao
        9
    TiDao  
       Feb 1, 2023
    1 docker ps 确认 halodb 是 running 的状态;2 用 root 账号看能不能登录再容器外部登录,不能登录需要进入 halodb 容器里给 root 远程登录权限;
    cMoon
        10
    cMoon  
    OP
       Feb 1, 2023
    @1120101929 access denied for user ‘root‘@
    @TiDao 确认过了 db 是正常启动了
    cMoon
        11
    cMoon  
    OP
       Feb 1, 2023
    @TiDao 我容器内部登录都进不去,配置文件加了 skip-grant-tables 可以进去,但是改完密码重启容器又是 access denied for user 了
    TiDao
        12
    TiDao  
       Feb 1, 2023
    @cMoon MYSQL_ROOT_PASSWORD: halodb 这是 root 的密码,你使用的是这个密码吗? mysql -uroot -p 进 db 容器里,用这个命令登录
    xuyang2
        13
    xuyang2  
       Feb 1, 2023
    https://github.com/halo-dev/docs/blob/main/docs/getting-started/install/docker-compose.md:

    environment:
    # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
    - MYSQL_ROOT_PASSWORD=o#DwN&JSa56
    - MYSQL_DATABASE=halo

    yours:

    environment:
    MYSQL_ROOT_PASSWORD: halodb
    TZ: Asia/Shanghai
    MYSQL_DATABASE: halo
    gumuxi
        14
    gumuxi  
       Feb 1, 2023
    cMoon
        15
    cMoon  
    OP
       Feb 1, 2023
    @TiDao 我查了 user 表的信息,
    mysql> SELECT User, authentication_string, Host FROM user;
    +------------------+------------------------------------------------------------------------+-----------+
    | User | authentication_string | Host |
    +------------------+------------------------------------------------------------------------+-----------+
    | root | halodb | % |
    | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | localhost |
    | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | localhost |
    | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | localhost |
    | root | halodb | localhost |
    +------------------+------------------------------------------------------------------------+-----------+
    cMoon
        16
    cMoon  
    OP
       Feb 1, 2023
    @xuyang2 我刚查了 user 表,发现问题了😂
    cMoon
        17
    cMoon  
    OP
       Feb 1, 2023
    @xuyang2
    @TiDao 存的密码是要自己先 md5 加密一下是吧😂
    xuyang2
        18
    xuyang2  
       Feb 1, 2023
    environment 的格式
    应该是 list 而不是 dict 吧
    cMoon
        19
    cMoon  
    OP
       Feb 1, 2023
    @xuyang2 应该都可以,我后面是按照 dockerhub 上 mysql 提供的格式改的
    cMoon
        20
    cMoon  
    OP
       Feb 1, 2023
    @cMoon 不是这个问题,裂开,搞了一天了
    xuyang2
        21
    xuyang2  
       Feb 1, 2023
    换个 MYSQL_USER 不要用 root 试试?
    cMoon
        22
    cMoon  
    OP
       Feb 1, 2023
    @xuyang2
    @TiDao 我把数据库挂载的配置删掉就没问题了
    joesonw
        23
    joesonw  
       Feb 1, 2023 via iPhone
    network 内端口用 3306
    moshiyeap100
        24
    moshiyeap100  
       Feb 1, 2023
    halo 的这个 docker-compose 配置最早应该是我写的,但是和我最初提的 pr 有些差异。不过你这个问题尝试下把整个 mysql 容器 rm 掉,然后删除 MYSQL 宿主机挂载的文件,然后重新创建一个 mysql 容器就好了。

    rm -rf ./mysql ./mysqlBackup ./mysqlConf
    moshiyeap100
        25
    moshiyeap100  
       Feb 1, 2023
    而且 MYSQL_ROOT_PASSWORD: halodb 和 - MYSQL_ROOT_PASSWORD=o#DwN&JSa56 这两种写法是 Map syntax 和 Array syntax ,有些细微差异的

    environment defines environment variables set in the container. can use either an array or a map. Any boolean values; true, false, yes, no, SHOULD be enclosed in quotes to ensure they are not converted to True or False by the YAML parser.environment
    magewu1223ll
        26
    magewu1223ll  
       Feb 1, 2023
    我之前遇到过的是 host 配置 127.0.0.1 失败 要改成 0.0.0.0 才能访问,不过看样子跟楼主不是同一个问题
    moshiyeap100
        27
    moshiyeap100  
       Feb 1, 2023
    如果是 access denied for user ‘root‘@, 那就在 environment 中加一条 MYSQL_ROOT_HOST: '%'
    aichunya
        28
    aichunya  
       Feb 1, 2023
    - --default-authentication-plugin=mysql_native_password
    把这个删掉就好了
    liuxingdeyu
        29
    liuxingdeyu  
       Feb 1, 2023
    environment:
    - TZ=Asia/Shanghai
    - MYSQL_ROOT_PASSWORD=123456
    noparking188
        30
    noparking188  
       Feb 1, 2023
    spring.r2dbc.url=r2dbc:pool:mysql://xxx:3316/halo

    你这里是写的本机地址吧,是地址试一下给 MySQL root 加远程登录权限,或者试一下换成 halodb 的容器名称

    我遇到过类似问题,官方 MySQL 镜像默认配置没给 root 远程登录权限,还有一些其它坑,需要自己改配置
    noparking188
        31
    noparking188  
       Feb 1, 2023
    @noparking188 #30 27 楼老哥的方法
    dy0425
        32
    dy0425  
       Feb 2, 2023 via Android
    我上次腾讯云上的测试数据库默认端口弱密码,被勒索了,重新起个容器改了密码,死活登不上去,搞了半天发现原来弱密码还能进去,挂载的配置没删
    cMoon
        33
    cMoon  
    OP
       Feb 2, 2023
    @moshiyeap100 谢谢大佬,应该就是这个挂载的文件的问题.现在解决了
    muhahaha
        34
    muhahaha  
       Feb 5, 2023 via iPhone
    请问 Halo 这个博客好用吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2523 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 16:02 · PVG 00:02 · LAX 09:02 · JFK 12:02
    ♥ Do have faith in what you're doing.