在带有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图像上。
答案 0 :(得分:1)
在您的主机上输入以下命令:
cd /home/myuser/db
sudo chown 1001:0 files
然后再次运行容器,那就是全部:)
docker logs percona
并看到mysql无权写入dir /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
后,我看到行drwxr-xr-x 5 mysql root 4096 Oct 6 14:39 mysql
后面的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具有完全相同的用户和组。