如何在bluemix卷上使用docker修复权限?
在一个容器中,我试图启动mysqld 我可以创建一个映像并推送到注册表,但当我想启动它时,如何在bluemix卷上使用docker修复权限?,docker,ibm-cloud,Docker,Ibm Cloud,在一个容器中,我试图启动mysqld 我可以创建一个映像并推送到注册表,但当我想启动它时,/var/lib/mysql卷无法初始化,因为我试图对它执行chown mysql,这是不允许的 我检查了docker特定的解决方案,但目前我无法进行任何工作 有没有办法在bluemix的绑定挂载文件夹上设置正确的权限?或者是否支持选项--中的卷,我似乎无法让它工作 我现在看到的唯一解决方案是以root身份运行mysqld,但我不希望这样 试试芒特·比德 使用cf ic volume create data
/var/lib/mysql
卷无法初始化,因为我试图对它执行chown mysql
,这是不允许的
我检查了docker特定的解决方案,但目前我无法进行任何工作
有没有办法在bluemix的绑定挂载文件夹上设置正确的权限?或者是否支持选项--
中的卷,我似乎无法让它工作
我现在看到的唯一解决方案是以root身份运行mysqld,但我不希望这样
试试芒特·比德
cf ic volume create database在bluemix上创建了一个卷
mysql\u install\u db
,初始化它的内容
docker run --name init_vol -v database:/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 run--name db\u srv--volumes from=db\u data registry.ng.bluemix.net//:sh-c'mysqld\u safe&tail-f/var/log/mysql.err'
docker inspect db_srv
显示:
[{“BluemixApp”:null,“Config”:{
...,
“工作目录”:“,
…}…}]
cf ic logs db_srv
显示:
150731 15:25:11 mysqld_安全启动mysqld守护程序,数据库来自
/var/lib/mysql 150731 15:25:11[注]/usr/sbin/mysqld(mysqld
5.5.44-0ubuntu0.14.04.1-log)作为过程377启动/未找到usr/sbin/mysqld:File./mysql-bin.index(错误代码:13)
150731 15:25:11[错误]正在中止
这是因为
--不支持来自的卷,并且在第一次运行中创建的数据没有保留在第二次运行中。这里有多个问题。我将设法解决一些问题。也许这会让你朝着正确的方向前进一步
--IBM容器中尚不支持来自的卷。您可以在第一个和后续容器上使用相同的--volume(-v)选项,而不是在第一个容器创建命令上使用-v,在后续容器上使用--volume
--IBM容器也不支持用户选项
我发现您使用--user(我想在localhost docker上)的语法不正确。docker run命令的所有选项必须位于图像名称之前。映像名称之后的任何内容都被视为在容器内运行的命令。在这种情况下,“--user=mysql”将被视为系统试图运行但失败的命令
您共享的最后一条错误消息显示,在工作目录中找不到导致应用程序中止的文件。您可以通过使用脚本作为在容器中运行的命令来解决这个问题,该命令将dir更改为正确的位置。在IBM容器中,用户名称空间为docker engine启用。“权限被拒绝”问题似乎是因为NFS不允许容器中的映射用户执行该操作
在我的本地设置中,在docker主机上安装了一个NFS(导出时不带\u root\u squash选项)。并使用-v选项将卷附加到容器。当容器
从docker派生,禁用了用户名称空间,我可以在容器内更改绑定装载的所有权。但是有了启用了用户名称空间的docker,我得到了
chown:更改“/mnt/volmnt”的所有权:不允许操作
cf(cf ic volume create…
)创建的卷是NFS,要验证,只需从容器中尝试mount-t nfs4
。
当启用时,将为docker引擎启用用户命名空间。容器内有效的root
是容器进程外部的非root
用户,NFS不允许映射的非root用户对容器内的卷执行chown操作
这是解决办法,你可以试试
在Dockerfile中
1.1在安装mysql之前,使用UID 1010或任何免费ID创建用户mysql
。
其他容器或新容器可以访问UID1010卷上的mysql数据文件
运行groupadd--gid 1010 mysql
docker run --name db_data -v /var/lib/mysql registry.ng.bluemix.net/<namespace>/<image>:<tag> mysql_install_db --user=mysql
运行useradd--uid 1010--gid 1010-m--shell/bin/bash-mysql
docker run --name db_data -v /var/lib/mysql registry.ng.bluemix.net/<namespace>/<image>:<tag> mysql_install_db --user=mysql
1.2安装MySqlL,但不初始化数据库
运行apt-get-update&&apt-get-install-y mysql服务器&&rm-rf/var/lib/mysql&&rm-rf/var/lib/apt/lists/*
在入口点脚本中
2.1在bind mount下以usermysql
的身份创建mysql数据目录,然后将其链接为/var/lib/mysql
docker run --name db_data -v /var/lib/mysql registry.ng.bluemix.net/<namespace>/<image>:<tag> mysql_install_db --user=mysql
假设卷安装在容器内的/mnt/db
(ice run-v:/mnt/db--publish 3306…
或cf ic run--volume:/mnt/db…
)。
定义mountpath环境变量
MOUNTPATH=“/mnt/db”
将mysql添加到组“root”
adduser mysql root
设置已装入卷的权限,以便root
组成员可以创建目录和文件
chmod 775$MOUNTPATH
在卷下创建mysql目录
su-c“mkdir-p/mnt/db/mysql”mysql
docker run --name db_data -v /var/lib/mysql registry.ng.bluemix.net/<namespace>/<image>:<tag> mysql_install_db --user=mysql
su-c“chmod 700/mnt/db/mysql”mysql
docker run --name db_data -v /var/lib/mysql registry.ng.bluemix.net/<namespace>/<image>:<tag> mysql_install_db --user=mysql
将目录链接到/var/lib/mysql
ln-sf/mnt/db/mysql/var/lib/mysql
docker run --name db_data -v /var/lib/mysql registry.ng.bluemix.net/<namespace>/<image>:<tag> mysql_install_db --user=mysql
chown-hMySQL:mysql/var/lib/mysql
docker run --name db_data -v /var/lib/mysql registry.ng.bluemix.net/<namespace>/<image>:<tag> mysql_install_db --user=mysql
从组中删除mysqlroot
deluser mysql根目录
chmod 755$MOUNTPATH
2.2首次将数据库初始化为usermysql
docker run --name db_data -v /var/lib/mysql registry.ng.bluemix.net/<namespace>/<image>:<tag> mysql_install_db --user=mysql
su-c“mysql\u install\u db--datadir=/var/lib/mysql”mysql
docker run --name db_data -v /var/lib/mysql registry.ng.bluemix.net/<namespace>/<image>:<tag> mysql_install_db --user=mysql
2.3以用户身份启动mysql服务器mysql
docker run --name db_data -v /var/lib/mysql registry.ng.bluemix.net/<namespace>/<image>:<tag> mysql_install_db --user=mysql
su-c”/usr/bin/mysqld\u-safe“mysql
docker run --name db_data -v /var/lib/mysql registry.ng.bluemix.net/<namespace>/<image>:<tag> mysql_install_db --user=mysql
那么您是说-v/var/lib/mysql将在我的所有容器之间持久化?还是在两次跑步之间?