将目录装回容器时,docker cp权限错误

时间:2016-02-29 13:49:43

标签: mysql docker

我试图从正在运行的mysql容器中获取/var/lib/mysql目录,以保持其持久性。然而,当我将目录挂载为卷时,mysql抱怨它没有权限:

mysqld: Table 'mysql.plugin' doesn't exist 2016-02-29 13:34:19 1 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

2016-02-29 13:34:20 1 [Note] Server socket created on IP: '::'. 2016-02-29 13:34:20 1 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

docker cp `cat mysqlinitCID`:/var/lib/mysql datadir/

此时我甚至使用tarer形式的docker cp与-p标志结合来保留权限,但它仍然存在特权问题。

docker cp `cat mysqlinitCID`:/var/lib/mysql - |sudo tar -C datadir/mysql/ -pxf -

似乎正确执行此操作的唯一方法是绕过docker cp然后安装说/tmp并自行调整/var/lib/mysql并将tarball复制到已安装的点并将其取出那样。

是否有正确的方法来利用我错过的docker cp

我像这样初始化mysql容器来抓取:

docker run \ --name=$(NAME)-mysql-init \ -d \ --env='DB_NAME=$(DB_NAME)' \ --cidfile="mysqlinitCID" \ --env='MYSQL_USER=$(DB_USER)' --env="MYSQL_ROOT_PASSWORD=$(DB_PASS)" \ --env="MYSQL_PASSWORD=$(DB_PASS)" \ --env="MYSQL_DATABASE=$(DB_NAME)" \ mysql:5.6

以下是我如何启动附加卷的容器:

docker run \ --name=$(NAME)-mysql \ -d \ --env='DB_NAME=$(DB_NAME)' \ --cidfile="mysqlCID" \ --env='MYSQL_USER=$(DB_USER)' --env="MYSQL_ROOT_PASSWORD=$(DB_PASS)" \ --env="MYSQL_PASSWORD=$(DB_PASS)" \ --volume=$(MYSQL_DATADIR):/var/lib/mysql \ mysql:5.6

1 个答案:

答案 0 :(得分:1)

好的,我的问题是一个简单的拼写错误,我把一个mysql目录放在另一个mysql目录中,所以正确的答案是使用tar表单上面稍作修改:

docker cp `cat mysqlinitCID`:/var/lib/mysql - |sudo tar -C datadir/ -pxf -