当定义了卷(-v)时,Docker percona(mysql mariadb)容器在ubuntu上运行后停止

时间:2017-10-06 15:22:43

标签: mysql ubuntu docker percona docker-volume

在带有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图像上。

1 个答案:

答案 0 :(得分:1)

解决方案

在您的主机上输入以下命令:

cd /home/myuser/db
sudo chown 1001:0 files

然后再次运行容器,那就是全部:)

  1. 运行失败后,我查看日志:docker logs percona并看到mysql无权写入dir /var/lib/mysql
  2. 我运行没有卷的容器:docker run --name percona -e MYSQL_ROOT_PASSWORD=secret -p 6603:3306 -d percona/percona-server:latest mysql -h docker_host_ip -P 6603
  3. 我登录到容器:docker exec -it percona /bin/bash
  4. 我输入:cd /var/lib
  5. 执行ls -l后,我看到行drwxr-xr-x 5 mysql root 4096 Oct 6 14:39 mysql后面的mysql目录附近。这意味着所有者为mysql,群组为root
  6. 我通过id -u mysql获取mysql用户UID(我得到 1001
  7. 我通过groups mysql检查mysql是否有一个组(root)。因此,为了获得根GID,我输入id -g mysql(我得 0
  8. chown命令允许设置文件UID:GID,即使对于不存在的用户(!),我们也不需要在主机上创建用户mysql。因此,在主机上运行chown ...之后,文件夹files与容器期望的mysql具有完全相同的用户和组。