Docker - 无法启动 mysql 权限错误
Docker - can not start mysql permission error
我对 docker 和 mysql 有疑问。我已经基于 phusion/baseimage 构建了一个图像。我想在 /var/lib/mysql 目录与我的主机 (OS X) 共享的位置创建映像,因为我不想将我的数据存储在容器中。
目录 /var/lib/mysql 未共享时一切正常。当我共享这个目录时,mysql 服务无法启动。日志中包含有关启动时权限问题的信息。
来自 /var/lib 的 ls -la 的结果是:
[...]
drwxr-xr-x 1 lc staff 170 Jan 3 16:55 mysql
[...]
mysql 用户应该是所有者。我尝试这样做:
sudo chown -R mysql:mysql mysql/
但是这个命令没有return任何错误,也没有改变所有者。
我还尝试将我的用户(从容器)添加到 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/*
当我们说用户在容器和主机之间共享时,并不完全;实际共享的是 UID。这意味着容器中名为 mysql
的用户很可能与主机上的用户 mysql
具有不同的 UID。
我们可以尝试使用图片设置权限来解决这个问题:
docker run --user root lukasz619/light-core_server chown -R mysql:mysql /var/lib/mysql
这可能有效,具体取决于您设置图像的方式。 VM 运行 in-between.
还有一个更复杂的问题
问题是OSX..我运行这个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 和容器之间无法正常共享。
我对 docker 和 mysql 有疑问。我已经基于 phusion/baseimage 构建了一个图像。我想在 /var/lib/mysql 目录与我的主机 (OS X) 共享的位置创建映像,因为我不想将我的数据存储在容器中。
目录 /var/lib/mysql 未共享时一切正常。当我共享这个目录时,mysql 服务无法启动。日志中包含有关启动时权限问题的信息。
来自 /var/lib 的 ls -la 的结果是:
[...]
drwxr-xr-x 1 lc staff 170 Jan 3 16:55 mysql
[...]
mysql 用户应该是所有者。我尝试这样做:
sudo chown -R mysql:mysql mysql/
但是这个命令没有return任何错误,也没有改变所有者。
我还尝试将我的用户(从容器)添加到 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/*
当我们说用户在容器和主机之间共享时,并不完全;实际共享的是 UID。这意味着容器中名为 mysql
的用户很可能与主机上的用户 mysql
具有不同的 UID。
我们可以尝试使用图片设置权限来解决这个问题:
docker run --user root lukasz619/light-core_server chown -R mysql:mysql /var/lib/mysql
这可能有效,具体取决于您设置图像的方式。 VM 运行 in-between.
还有一个更复杂的问题问题是OSX..我运行这个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 和容器之间无法正常共享。