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 -