在定义了卷(-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 

然后再次运行容器,这就是所有:)

办法

  1. 运行失败后,我查看日志: docker logs percona ,看到mysql没有权限写入目录/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. 我login到容器: docker exec -it percona /bin/bash
  4. 我input: cd /var/lib
  5. 执行ls -l我看到附近的mysql目录下面的行: drwxr-xr-x 5 mysql root 4096 Oct 6 14:39 mysql 。 这意味着所有者是mysql ,组是root
  6. 我通过id -u mysql获取mysql用户UID(我得到1001
  7. 我通过groups mysql检查mysql是否有一个组(root)。 所以要得到根GID我键入id -g mysql (我得到0
  8. 即使对于不存在(!)的用户, chown命令也允许设置文件UID:GID,所以我们不需要在主机上创build用户mysql 。 因此,在主机上运行chown ...之后,文件夹files与容器中的mysql所期望的完全相同的用户和组。