在带有 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 dir附近看到以下行:drwxr-xr-x 5 mysql root 4096 Oct 6 14:39 mysql
。这意味着所有者是mysql
,组是root
。 - 我通过
id -u mysql
获得mysql用户UID(我得到1001) - 我通过
groups mysql
检查mysql有一个组(根)。所以要获得根 GID,我键入id -g mysql
(我得到 0) chown
命令允许为不存在的用户设置文件 UID:GID (!),因此我们不需要在主机上创建用户mysql
。因此,在主机上运行chown ...
后,文件夹files
具有与容器内 mysql 期望的完全相同的用户和组。