在带有 Docker 17.05.0-ce 的 Ubuntu 16.04 上,我尝试使用主机目录映射(卷)设置 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 图像上。
最佳答案
解决方案
在您的主机上输入以下命令:
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
- 我登录到容器:
docker exec -it percona/bin/bash
- 我输入:
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,因此我们不需要在主机上创建用户mysql
。因此,在主机上运行chown ...
后,文件夹files
与容器内的 mysql 期望的用户和组完全相同。
关于mysql - Docker percona (mysql mariadb) 容器在定义卷 (-v) 后在 ubuntu 上运行后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46609066/