V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
jmyz0455
V2EX  ›  Linux

用 Docker 搭建 NextCloud 连接 MariaDB 报错。

  •  
  •   jmyz0455 · 2020-04-13 23:16:44 +08:00 · 3492 次点击
    这是一个创建于 1444 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先,我是用以下命令在 Docker 上搭建 MariaDB 和 NextCloud :

    sudo docker run\
        --name aaa_ma -d -p 127.0.0.1:8884:3306\
        -e MYSQL_ROOT_PASSWORD=ROOT 的密码\
        -e MYSQL_USER=ccc\
        -e MYSQL_PASSWORD=ccc 的密码\
        mariadb:latest;\
    docker run\
        --name bbb_nc -d -p 127.0.0.1:8886:80\
        --link aaa_ma:aaa_ma\
        -e MYSQL_DATABASE=ccc_db\
        -e MYSQL_USER=ccc\
        -e MYSQL_PASSWORD=ccc 的密码\
        -e MYSQL_HOST=aaa_ma\
        nextcloud:latest
    

    服务跑起来了,我用 Nginx 反代 8886 端口,跑到页面上去访问,提示要创建管理员账户,但是当我输入完成回车后,会告诉我连接数据库失败:

    Error while trying to create admin user: Failed to connect to the database: An exception occurred in driver: SQLSTATE[HY000] [1044] Access denied for user 'ccc'@'%' to database 'ccc_db'
    

    经过搜索,在数据库 root 用户里尝试授权:

    grant all on ccc_db.* to 'oc_ccc'@'%' identified by 'ccc 的密码' with grant option;
    

    但还是不行。想不通是哪一步出了问题,求助。

    7 条回复    2020-04-15 09:16:20 +08:00
    defunct9
        1
    defunct9  
       2020-04-14 05:19:33 +08:00 via iPhone
    你这是跑了两个容器,网络不通的。在 bbb_nc 中你需要指定 Mysql 的 port 的,8884 。
    下面的例子中网络层是打通的
    https://github.com/ichiTechs/Dockerized-SSL-NextCloud-with-MariaDB/blob/master/docker-compose.yml
    nicolas0caser
        2
    nicolas0caser  
       2020-04-14 14:12:06 +08:00
    启动 mysql 时,缺失了`MYSQL_DATABASE=nextcloud` 这个, 添加上就行了.

    @defunct9 默认情况下这两个容器网络是不通的, 不过有**link**这个参数, nextcloud 这个容器是可以访问 mariadb 的.

    参考:

    ```
    docker run \
    --name nextcloud_db -d -p 127.0.0.1:3306:3306 \
    -e MYSQL_ROOT_PASSWORD=nextcloud \
    -e MYSQL_DATABASE=nextcloud \
    -e MYSQL_USER=nextcloud \
    -e MYSQL_PASSWORD=nextcloud \
    mariadb:latest

    docker run \
    --name nextcloud -d -p 80:80 \
    --link nextcloud_db:nextcloud_db \
    -e MYSQL_DATABASE=nextcloud \
    -e MYSQL_USER=nextcloud \
    -e MYSQL_PASSWORD=nextcloud \
    -e MYSQL_HOST=nextcloud_db \
    nextcloud:latest

    ```
    jmyz0455
        3
    jmyz0455  
    OP
       2020-04-14 15:03:06 +08:00
    @defunct9 我的参数里有一句「-e MYSQL_HOST=aaa_ma 」,配合 --link 可以建立容器连接。如果不要的话,报错内容是无法连接,而不是什么授权失败。在 aaa_ma 容器里面可以看到新建了一个 oc_ccc 的用户,所以我猜是连接上了,只是没权限。


    @nicolas0caser 但是我希望这个 MariaDB 容器能给其他容器用,所以「-e MYSQL_DATABASE=nextcloud 」能多配几个的吗?
    jmyz0455
        4
    jmyz0455  
    OP
       2020-04-14 16:09:10 +08:00
    @nicolas0caser 我试过 -e MYSQL_DATABASE=nextcloud,chevereto 不行。
    -e MYSQL_DATABASE=nextcloud
    -e MYSQL_DATABASE=chevereto
    也只能创建一个。
    可能 Docker Run 不支持 MariaDB 建立多个 database 吧。你看看我以前问过的 v2ex.com/t/660862
    也许只有 Docker Compose 才能解决这个问题。
    nicolas0caser
        5
    nicolas0caser  
       2020-04-14 17:47:30 +08:00
    liuxu
        6
    liuxu  
       2020-04-14 23:44:11 +08:00
    emmmm.....
    grant all on ccc_db.* to 'oc_ccc'@'%' identified by 'ccc 的密码' with grant option;

    你的用户名不是 ccc 吗,怎么这里是 oc_ccc
    jmyz0455
        7
    jmyz0455  
    OP
       2020-04-15 09:16:20 +08:00
    @nicolas0caser 我自己手动进容器自建了,已经实现多容器互联,谢谢思路。
    @liuxu 这里是 NextCloud 自己新建的用户名,这算是一个 BUG,搭建成功后第一次创建管理员账号前多刷新几遍就行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5290 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 09:32 · PVG 17:32 · LAX 02:32 · JFK 05:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.