在定义了卷(-v)的情况下,在Ubuntu上运行后,Docker percona(mysql mariadb)容器停止运行
在Ubuntu 16.04和Docker 17.05.0-ce上,我尝试使用主机目录映射(卷)来设置percona-mysql docker镜像。 这里是图像:
docker pull percona/percona-server:latest
这里是容器运行命令:
docker run --name percona -e MYSQL_ROOT_PASSWORD=secret -v /home/myuser/db/files:/var/lib/mysql -p 6603:3306 -d percona/percona-server:latest mysql -h docker_host_ip -P 6603
问题是容器在这个命令后立即停止 – 但是当我没有使用-v ...
参数(卷映射)时,容器启动没有问题。 如何解决这个问题呢?
这个问题也可能在mysql或mariadb图像上。
解
在主机上input以下命令:
cd /home/myuser/db sudo chown 1001:0 files
然后再次运行容器,这就是所有:)
办法
- 运行失败后,我查看日志:
docker logs percona
,看到mysql没有权限写入目录/var/lib/mysql
- 我运行容器没有卷:
docker run --name percona -e MYSQL_ROOT_PASSWORD=secret -p 6603:3306 -d percona/percona-server:latest mysql -h docker_host_ip -P 6603
- 我login到容器:
docker exec -it percona /bin/bash
- 我input:
cd /var/lib
- 执行
ls -l
我看到附近的mysql目录下面的行:drwxr-xr-x 5 mysql root 4096 Oct 6 14:39 mysql
。 这意味着所有者是mysql
,组是root
。 - 我通过
id -u mysql
获取mysql用户UID(我得到1001 ) - 我通过
groups mysql
检查mysql是否有一个组(root)。 所以要得到根GID我键入id -g mysql
(我得到0 ) - 即使对于不存在(!)的用户,
chown
命令也允许设置文件UID:GID,所以我们不需要在主机上创build用户mysql
。 因此,在主机上运行chown ...
之后,文件夹files
与容器中的mysql所期望的完全相同的用户和组。