【问题标题】:Docker - can not start mysql permission errorDocker - 无法启动 mysql 权限错误
【发布时间】:2016-04-07 08:45:26
【问题描述】:

我遇到了 docker 和 mysql 的问题。我已经基于 phusion/baseimage 构建了一个图像。我想创建 /var/lib/mysql 目录与我的主机(OS X)共享的图像,因为我不想将我的数据存储在容器上。

当目录 /var/lib/mysql 不共享时一切正常。当我共享这个目录时,mysql服务无法启动。日志中包含有关启动时权限问题的信息。

ls -la 来自 /var/lib 的结果是:

[...]
drwxr-xr-x  1 lc      staff    170 Jan  3 16:55 mysql
[...]

mysql 用户应该是所有者。我试着做:

sudo chown -R mysql:mysql mysql/

但是这个命令没有返回任何错误,也没有改变所有者。

我也尝试将我的用户(从容器)添加到 mysql 组:

lc@cbe25ac0681e:~$ groups lc
lc : lc sudo mysql

但它也没有工作。有人知道如何解决这个问题吗?

我的 docker-compose.yml 文件:

server:
  image: lukasz619/light-core_server
  ports:
    - "40080:80"
    - "40022:22"
    - "40443:443"
    - "43306:3306"
  volumes:
     - /Users/lukasz/Workspace/database/mysql:/var/lib/mysql

这是我的 Dockerfile:

FROM phusion/baseimage

RUN apt-get update
RUN apt-get install -y apache2

# Enable SSH
RUN rm -f /etc/service/sshd/down
RUN /etc/my_init.d/00_regen_ssh_host_keys.sh

# public key for root
ADD public_key.pub /tmp/public_key.pub
RUN cat /tmp/public_key.pub >> /root/.ssh/authorized_keys && rm -f /tmp/public_key.pub

EXPOSE 80
CMD ["/sbin/my_init"]
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

【问题讨论】:

    标签: mysql macos permissions docker volumes


    【解决方案1】:

    当我们说用户在容器和主机之间共享时,它不是完全正确的;它是实际共享的 UID。这意味着容器中名为 mysql 的用户很可能与主机上的用户 mysql 具有不同的 UID。

    我们可以尝试通过使用图片设置权限来解决这个问题:

    docker run --user root lukasz619/light-core_server chown -R mysql:mysql /var/lib/mysql
    

    这可能会起作用,具体取决于您设置图像的方式。中间运行的虚拟机还有一个更复杂的问题。

    【讨论】:

    • 我希望你能理解我的英语,因为我来自波兰 ;) 我已经添加到我之前发布的 Dockerfile 内容中。是的,我知道主机和容器上有不同的用户。我运行了那个命令: sudo chmod -R mysql:mysql mysql/ On container.. 我通过 SSH 运行它。那,我认为你发布的内容与我所做的相同。构建映像后,我通过 SSH 连接到容器并在那里安装了 mysql 等。安装 mysql 后,我检查它是否正常工作(+ 由 docker commit 保存),然后我开始与我的主机共享 /var/lib/mysql。
    • 你运行的是 chmod,而不是 chown。容器通常不使用 sudo 或 SSH,这就是我假设您在主机上工作的原因。
    • 我知道,我忘记在我的第一篇关于 SSH 的文章中写了。还有一个错字 - 我的第一篇文章中的意思是 Chown(不是 chmod):) Chown 不起作用..
    • 这不可能是 Dockerfile - 你还没有安装 mysql 或创建 mysql 用户。我真的不喜欢你所做的。使用官方的 mysql 和 apache 镜像比使用自己的镜像要好得多。您可以正常使用 docker exec 代替 SSH。
    【解决方案2】:

    问题是 OS X.. 我运行了这个 docker-composer.yml

    server:
      image: lukasz619/light-core_server
      ports:
        - "40080:80"
        - "40022:22"
        - "40443:443"
        - "43306:3306"
      volumes:
          - /var/mysql:/var/lib/mysql
    

    只能在 boot2docker 和容器之间共享目录(并执行 chown),但不能在 Os X 和容器之间正常共享。

    【讨论】:

    • 嗯,我怀疑这是问题所在,或者至少与它有关,但请注意,OP 正在使用 /Users 下的目录,该目录应安装到 VM 中。
    • 抱歉,刚刚注意到您在回答自己的问题。你应该发现如果你运行docker-machine ssh default进入VM,你的目录挂载在/Users下,所以你可以在MacOS和容器之间共享目录(我一直这样做)。
    • 我知道,我看到 /Users 已安装到 VM。但问题是我无法更改该目录中的任何权限。无论我做什么,我都看不到任何变化。我可以更改从 VM 到容器共享的目录的权限(例如 /var/mysql (VM) 到 /var/lib/mysql (container))。
    猜你喜欢
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2018-02-14
    • 1970-01-01
    相关资源
    最近更新 更多