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

abo*_*abo 5 docker ibm-cloud

在一个容器中,我试图启动mysqld.

我能够创建一个图像并推送到注册表,但是当我想启动它时,/var/lib/mysql无法初始化该卷,因为我尝试对其进行操作chown mysql并且不允许.

我检查了docker特定的解决方案但是现在我无法做任何工作.

有没有办法从bluemix在绑定挂载的文件夹上设置正确的权限?或者--volumes-from支持该选项,我似乎无法使其工作.

我现在能看到的唯一解决方案是以root身份运行mysqld,但我不愿意.

尝试使用mount-bind

  1. 使用在bluemix上创建了一个卷 cf ic volume create database
  2. 尝试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
    
    Run Code Online (Sandbox Code Playgroud)

mysql_install_db应该填充/var/lib/mysql并设置--user选项中所有者设置的权限,但我得到:

chown:更改'/ var/lib/mysql'的所有权:权限被拒绝.

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

尝试使用volume-from数据容器

  1. 我用卷创建一个数据容器 /var/lib/mysql

    docker run --name db_data -v /var/lib/mysql registry.ng.bluemix.net/<namespace>/<image>:<tag> mysql_install_db --user=mysql
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我使用选项运行我的数据库容器 --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'
    
    Run Code Online (Sandbox Code Playgroud)

docker inspect db_srv 说明:

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

cf ic logs db_srv 说明:

150731 15:25:11 mysqld_safe用/ var/lib/mysql中的数据库启动mysqld守护进程150731 15:25:11 [注意]/usr/sbin/mysqld(mysqld 5.5.44-0ubuntu0.14.04.1-log)从进程377 ../usr/sbin/mysqld:找不到文件'./mysql-bin.index'(错误代码:13)150731 15:25:11 [ERROR]正在中止

这是由于--volumes-from不受支持,以及第一次没有停留在第二次运行中创建的数据.

Ala*_*sef 2

您在这里有多个问题。我会尝试解决一些问题。也许这会让你在正确的方向上更进一步。

IBM Containers 尚不支持 --volumes-from。您可以通过在第一个和后续容器上使用相同的 --volume (-v) 选项来解决这个问题,而不是在第一个容器创建命令上使用 -v 并在后续容器上使用 --volumes-from 。

IBM Containers 也不支持 --user 选项。

我发现您使用 --user 的语法(我想在本地主机 docker 上)不正确。docker run 命令的所有选项都必须位于映像名称之前。图像名称后面的任何内容都被视为在容器内运行的命令。在这种情况下,“--user=mysql”将被视为系统将尝试运行并失败的命令。

您共享的最后一条错误消息显示,在工作目录中找不到某些文件,导致应用程序中止。您可以通过使用脚本作为在容器中运行的命令来解决这个问题,该命令将 dir 更改为正确的位置。