docker cp的权限是错误的,当你将目录回到容器

我试图从运行的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/

在这一点上,我甚至使用docker cp的tarforms与-p标志结合来保留权限,但它仍然带有特权问题。

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

看来唯一的方法是正确的执行docker cp并挂载/tmp然后tar自己的/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

好吧,我的问题在这里是一个简单的错字,我把一个mysql目录放在另一个mysql目录中,所以正确的答案是使用上面的一个轻微修改的焦油forms:

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