gpt4 book ai didi

docker - 如何在 bluemix 卷上使用 docker 修复权限?

转载 作者:行者123 更新时间:2023-12-04 19:03:13 25 4
gpt4 key购买 nike

在一个容器中,我正在尝试启动 mysqld。

我能够创建一个镜像并推送到注册表,但是当我想启动它时,/var/lib/mysql当我尝试执行 chown mysql 时,无法初始化音量就可以了,这是不允许的。

我检查了 docker 特定的解决方案,但现在我无法进行任何工作。

有没有办法从 bluemix 对绑定(bind)安装的文件夹设置正确的权限? 或者是选项--volumes-from支持,我似乎无法让它工作。

我现在能看到的唯一解决方案是以 root 身份运行 mysqld,但我宁愿不这样做。

尝试安装绑定(bind)

  • 使用 cf ic volume create database 在 bluemix 上创建了一个卷
  • 尝试运行mysql_install_db在我的数据库容器上初始化它的内容
    docker run --name init_vol -v database:/var/lib/mysql registry.ng.bluemix.net/<namespace>/<image>:<tag> mysql_install_db --user=mysql
  • mysql_install_db应该填充 /var/lib/mysql并将权限设置为 --user 中的所有者集选项,但我得到:

    chown: changing ownership of '/var/lib/mysql': Permission denied.



    我还使用 sudo 或脚本以不同的方式尝试了上述方法。我试过 mysql_install_db --user=root ,它确实正确设置了我的文件夹,除了它由 root 用户拥有,我宁愿让 mysql 以 mysql 用户身份运行。

    尝试使用volumes-from数据容器
  • 我创建了一个带有卷 /var/lib/mysql 的数据容器
    docker run --name db_data -v /var/lib/mysql registry.ng.bluemix.net/<namespace>/<image>:<tag> mysql_install_db --user=mysql
  • 我使用选项 --volumes-from 运行我的数据库容器
    docker run --name db_srv --volumes-from=db_data registry.ng.bluemix.net/<namespace>/<image>:<tag> sh -c 'mysqld_safe & tail -f /var/log/mysql.err'
  • docker inspect db_srv显示:

    [{ "BluemixApp": null, "Config": { ..., "WorkingDir": "", ... } ... }]


    cf ic logs db_srv显示:

    150731 15:25:11 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql 150731 15:25:11 [Note] /usr/sbin/mysqld (mysqld 5.5.44-0ubuntu0.14.04.1-log) starting as process 377 .. /usr/sbin/mysqld: File './mysql-bin.index' not found (Errcode: 13) 150731 15:25:11 [ERROR] Aborting



    这是由于 --volumes-from不受支持,并且在第一次创建的数据不保留在第二次运行中。

    最佳答案

    在 IBM Containers 中,为 docker 引擎启用了用户 namespace 。 “权限被拒绝”问题似乎是因为 NFS 不允许来自容器的映射用户执行操作。

    在我的本地设置中,在 docker 主机上,安装了一个 NFS(使用 no_root_squash 选项导出)。并使用 -v 选项将卷附加到容器。当容器是
    从带有禁用用户命名空间的 docker 生成,我能够更改容器内绑定(bind)挂载的所有权。但是随着用户命名空间启用docker,我得到chown: changing ownership of ‘/mnt/volmnt’: Operation not permitted
    cf ( cf ic volume create ... ) 创建的卷是 NFS,要验证只需尝试 mount -t nfs4从容器。
    何时为 docker 引擎启用用户命名空间。有效root容器内是 non-root容器进程之外的用户和 NFS 不允许映射的非 root 用户对容器内的卷执行 chown 操作。

    这是解决方法,您可能想尝试

  • 在 Dockerfile 中

    1.1 创建用户mysql在 MySql 安装之前使用 UID 1010 或任何免费 ID。
    其他 Container 或新 Container 可以使用 UID 1010 访问 Volume 上的 mysql 数据文件
    RUN groupadd --gid 1010 mysqlRUN useradd --uid 1010 --gid 1010 -m --shell /bin/bash mysql
    1.2 安装MySqlL但不初始化数据库
    RUN apt-get update && apt-get install -y mysql-server && rm -rf /var/lib/mysql && rm -rf /var/lib/apt/lists/*
  • 在入口点脚本中

    2.1 以用户mysql在bind-mount下创建mysql数据目录然后链接为/var/lib/mysql
    假设卷安装在 /mnt/db在容器内( ice run -v <volume name>:/mnt/db --publish 3306...cf ic run --volume <volume name>:/mnt/db ... )。
    定义安装路径环境变量
    MOUNTPATH="/mnt/db"
    将mysql添加到组“root”
    adduser mysql root
    设置已安装卷的权限,以便 root组成员可以创建目录和文件
    chmod 775 $MOUNTPATH
    在 Volume 下创建 mysql 目录
    su -c "mkdir -p /mnt/db/mysql" mysqlsu -c "chmod 700 /mnt/db/mysql" mysql
    将目录链接到/var/lib/mysql
    ln -sf /mnt/db/mysql /var/lib/mysqlchown -h mysql:mysql /var/lib/mysql
    删除 mysql来自群组 rootdeluser mysql rootchmod 755 $MOUNTPATH
    2.2 首次以用户mysql 初始化数据库
    su -c "mysql_install_db --datadir=/var/lib/mysql" mysql
    2.3 以用户mysql启动mysql服务器
    su -c "/usr/bin/mysqld_safe" mysql
  • 关于docker - 如何在 bluemix 卷上使用 docker 修复权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31750970/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com