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

标签 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 图像上。

最佳答案

解决方案

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

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. 我登录到容器:docker exec -it percona/bin/bash
  4. 我输入: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,因此我们不需要在主机上创建用户 mysql。因此,在主机上运行 chown ... 后,文件夹 files 与容器内的 mysql 期望的用户和组完全相同。

关于mysql - Docker percona (mysql mariadb) 容器在定义卷 (-v) 后在 ubuntu 上运行后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46609066/

相关文章:

docker - 多个具有相同图像和内存使用情况的 docker 容器

docker - 使用docker使用AWS命令

python - jedi-vim 没有找到 python2 dist-packages,但是 python3 是的

Docker System.Security.Cryptography.CryptographicException : The parameter is incorrect

php - 如何在 Laravel 5 中仅对数据库表中的特定记录使用唯一验证?

mysql - 错误 1064 (42000) && 错误 1005 (HY000) : Can't create table Contact_Info_Tbl (errno: 150)

MySQL CONCAT() 条件 NETBEANS 错误

php - 模式与两个表列之间的mysql进行比较

mysql - 无法打开共享库 '/usr/lib/mysql/plugin/ha_cassandra.so'

ruby-on-rails - 我如何在 ubuntu 17.04 上安装 rmagick