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

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

  •  
  •   cMoon · Feb 1, 2023 · 4142 views
    This topic created in 1378 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
    cMoon
    OP
    Feb 1, 2023
    1
    容器内也无法登录,修改密码没用
    Still4
    Still4
    Feb 1, 2023
    2
    MYSQL_ROOT_HOST=%
    加上这个试试
    cMoon
    cMoon
    OP
    Feb 1, 2023
    3
    @Still4 还是登不上
    wdssmq
    wdssmq
    Feb 1, 2023
    4
    - --spring.r2dbc.url=r2dbc:pool:mysql://xxx:3316/halo

    ↓ ↓

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

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

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

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

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