V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cMoon
V2EX  ›  程序员

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

  •  
  •   cMoon · 127 天前 · 1745 次点击
    这是一个创建于 127 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想自己搭一个博客( 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
          # 初始化的超级管理员密码
          - [email protected]
    
      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 条回复    2023-02-05 22:32:20 +08:00
    cMoon
        1
    cMoon  
    OP
       127 天前
    容器内也无法登录,修改密码没用
    Still4
        2
    Still4  
       127 天前
    MYSQL_ROOT_HOST=%
    加上这个试试
    cMoon
        3
    cMoon  
    OP
       127 天前
    @Still4 还是登不上
    wdssmq
        4
    wdssmq  
       127 天前
    - --spring.r2dbc.url=r2dbc:pool:mysql://xxx:3316/halo

    ↓ ↓

    - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
    1120101929
        5
    1120101929  
       127 天前
    --spring.r2dbc.password= halodb

    password 多了空格?
    xuyang2
        6
    xuyang2  
       127 天前
    MySQL 报错难道就给你报个 "Access denied" ?
    Access denied **for whom** ?
    TiDao
        7
    TiDao  
       127 天前
    1 docker ps 确认 halodb 是 running 的状态;
    cMoon
        8
    cMoon  
    OP
       127 天前
    @wdssmq
    @1120101929 确实是多了个空格,但问题应该是出在下面 halodb 的配置,我容器内都登录不了
    TiDao
        9
    TiDao  
       127 天前
    1 docker ps 确认 halodb 是 running 的状态;2 用 root 账号看能不能登录再容器外部登录,不能登录需要进入 halodb 容器里给 root 远程登录权限;
    cMoon
        10
    cMoon  
    OP
       127 天前
    @1120101929 access denied for user ‘root‘@
    @TiDao 确认过了 db 是正常启动了
    cMoon
        11
    cMoon  
    OP
       127 天前
    @TiDao 我容器内部登录都进不去,配置文件加了 skip-grant-tables 可以进去,但是改完密码重启容器又是 access denied for user 了
    TiDao
        12
    TiDao  
       127 天前
    @cMoon MYSQL_ROOT_PASSWORD: halodb 这是 root 的密码,你使用的是这个密码吗? mysql -uroot -p 进 db 容器里,用这个命令登录
    xuyang2
        13
    xuyang2  
       127 天前
    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  
       127 天前
    cMoon
        15
    cMoon  
    OP
       127 天前
    @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
       127 天前
    @xuyang2 我刚查了 user 表,发现问题了😂
    cMoon
        17
    cMoon  
    OP
       127 天前
    @xuyang2
    @TiDao 存的密码是要自己先 md5 加密一下是吧😂
    xuyang2
        18
    xuyang2  
       127 天前
    environment 的格式
    应该是 list 而不是 dict 吧
    cMoon
        19
    cMoon  
    OP
       127 天前
    @xuyang2 应该都可以,我后面是按照 dockerhub 上 mysql 提供的格式改的
    cMoon
        20
    cMoon  
    OP
       127 天前
    @cMoon 不是这个问题,裂开,搞了一天了
    xuyang2
        21
    xuyang2  
       127 天前
    换个 MYSQL_USER 不要用 root 试试?
    cMoon
        22
    cMoon  
    OP
       127 天前
    @xuyang2
    @TiDao 我把数据库挂载的配置删掉就没问题了
    joesonw
        23
    joesonw  
       127 天前 via iPhone
    network 内端口用 3306
    moshiyeap100
        24
    moshiyeap100  
       127 天前
    halo 的这个 docker-compose 配置最早应该是我写的,但是和我最初提的 pr 有些差异。不过你这个问题尝试下把整个 mysql 容器 rm 掉,然后删除 MYSQL 宿主机挂载的文件,然后重新创建一个 mysql 容器就好了。

    rm -rf ./mysql ./mysqlBackup ./mysqlConf
    moshiyeap100
        25
    moshiyeap100  
       127 天前
    而且 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  
       127 天前
    我之前遇到过的是 host 配置 127.0.0.1 失败 要改成 0.0.0.0 才能访问,不过看样子跟楼主不是同一个问题
    moshiyeap100
        27
    moshiyeap100  
       127 天前
    如果是 access denied for user ‘root‘@, 那就在 environment 中加一条 MYSQL_ROOT_HOST: '%'
    aichunya
        28
    aichunya  
       127 天前
    - --default-authentication-plugin=mysql_native_password
    把这个删掉就好了
    liuxingdeyu
        29
    liuxingdeyu  
       127 天前
    environment:
    - TZ=Asia/Shanghai
    - MYSQL_ROOT_PASSWORD=123456
    noparking188
        30
    noparking188  
       127 天前
    spring.r2dbc.url=r2dbc:pool:mysql://xxx:3316/halo

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

    我遇到过类似问题,官方 MySQL 镜像默认配置没给 root 远程登录权限,还有一些其它坑,需要自己改配置
    noparking188
        31
    noparking188  
       127 天前
    @noparking188 #30 27 楼老哥的方法
    dy0425
        32
    dy0425  
       127 天前 via Android
    我上次腾讯云上的测试数据库默认端口弱密码,被勒索了,重新起个容器改了密码,死活登不上去,搞了半天发现原来弱密码还能进去,挂载的配置没删
    cMoon
        33
    cMoon  
    OP
       126 天前
    @moshiyeap100 谢谢大佬,应该就是这个挂载的文件的问题.现在解决了
    muhahaha
        34
    muhahaha  
       123 天前 via iPhone
    请问 Halo 这个博客好用吗?
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1092 人在线   最高记录 5634   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 18:17 · PVG 02:17 · LAX 11:17 · JFK 14:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.