我试图从正在运行的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
答案 0 :(得分:1)
好的,我的问题是一个简单的拼写错误,我把一个mysql目录放在另一个mysql目录中,所以正确的答案是使用tar表单上面稍作修改:
docker cp `cat mysqlinitCID`:/var/lib/mysql - |sudo tar -C datadir/ -pxf -