mysql - Docker 和 Mysql : libz. so.1:无法打开共享对象文件:权限被拒绝

标签 mysql linux ubuntu shared-libraries docker

在这个 Dockerfile 中运行 mysqld 时(在我的 Linux 机器上,Linux 12.04)

Dockerfile:

FROM ubuntu:precise
RUN apt-get update
RUN apt-get install -y mysql-server

CMD ["/usr/sbin/mysqld"]

我得到 mysqld: error while loading shared libraries: libz.so.1: cannot open shared object file: Permission denied

而通过 boot2docker 在我的 Mac 上运行它 mysqld 启动得很好。

我尝试了不同的基础 docker 镜像:

  • phusion/baseimage:0.9.8
  • phusion/baseimage:0.9.1
  • ubuntu:最新的

我已经在主机系统上运行了apt-get updateapt-get upgrade(包括更新Mysql),我已经重启了主机系统。

关于如何进行的任何想法?

关于我的系统的信息:

$ docker version
Client version: 0.9.0
Go version (client): go1.2.1
Git commit (client): 2b3fdf2
Server version: 0.9.0
Git commit (server): 2b3fdf2
Go version (server): go1.2.1
Last stable version: 0.9.0

$ docker info
Containers: 37
Images: 340
Driver: aufs
Root Dir: /var/lib/docker/aufs
Dirs: 414
WARNING: No swap limit support

$ uname -a
Linux Ubuntu-1204-precise-64-minimal 3.8.0-37-generic #53~precise1-Ubuntu SMP Wed Feb 19 21:37:54 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

对 leeduhem 关于 libz.so.1 权限的评论的回答:

$ ls -l /lib/x86_64-linux-gnu/libz.so.1
lrwxrwxrwx 1 root root 15 Nov 10  2011 /lib/x86_64-linux-gnu/libz.so.1 -> libz.so.1.2.3.4

$ ls -l /lib/x86_64-linux-gnu/libz.so.1.2.3.4 
-rw-r--r-- 1 root root 92720 Nov 10  2011 /lib/x86_64-linux-gnu/libz.so.1.2.3.4

更改权限

$ chmod +x  /lib/x86_64-linux-gnu/libz.so.1.2.3.4 

我仍然得到错误。

运行 strace -o/tmp/mysql.strace mysqldcat/tmp/mysql.strace 给出

execve("/usr/sbin/mysqld", ["mysqld"], [/* 7 vars */]) = 0
brk(0)                                  = 0x7f4d41f7c000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4d403c5000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)
open("/lib/x86_64-linux-gnu/tls/x86_64/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/tls/x86_64", 0x7fff713907f0) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/tls/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/tls", 0x7fff713907f0) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/x86_64/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/x86_64", 0x7fff713907f0) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)
stat("/lib/x86_64-linux-gnu", 0x7fff713907f0) = -1 EACCES (Permission denied)
open("/usr/lib/x86_64-linux-gnu/tls/x86_64/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu/tls/x86_64", 0x7fff713907f0) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/tls/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu/tls", 0x7fff713907f0) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/x86_64/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu/x86_64", 0x7fff713907f0) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu", 0x7fff713907f0) = -1 EACCES (Permission denied)
open("/lib/tls/x86_64/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/tls/x86_64", 0x7fff713907f0) = -1 ENOENT (No such file or directory)
open("/lib/tls/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/tls", 0x7fff713907f0)        = -1 ENOENT (No such file or directory)
open("/lib/x86_64/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64", 0x7fff713907f0)     = -1 ENOENT (No such file or directory)
open("/lib/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib", 0x7fff713907f0)            = -1 EACCES (Permission denied)
open("/usr/lib/tls/x86_64/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/tls/x86_64", 0x7fff713907f0) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/tls", 0x7fff713907f0)    = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64", 0x7fff713907f0) = -1 ENOENT (No such file or directory)
open("/usr/lib/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib", 0x7fff713907f0)        = -1 EACCES (Permission denied)
writev(2, [{"mysqld", 6}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libz.so.1", 9}, {": ", 2}, {"cannot open shared object file", 30}, {": ", 2}, {"Permission denied", 17}, {"\n", 1}], 10) = 107

查看跟踪似乎表明的目录/lib 和/lib/x86_64-linux-gnu 是不允许的:

$ ls -ld /lib
drwxr-xr-x 12 root root 4096 Dec 16 13:42 /lib

$ ls -ld /lib/x86_64-linux-gnu
drwxr-xr-x 3 root root 4096 Mar 17 13:39 /lib/x86_64-linux-gnu  

最佳答案

删除容器为我解决了这个问题。

更新:该解决方案的工作时间不长。

于是我不断寻找,发现something related with Apparmor .

如果您的主机上安装了 mysql,Apparmor 可能会限制对您的 docker 容器上安装的 mysql 共享库的访问。以下解决了问题:

#Type this on your host terminal
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld

关于mysql - Docker 和 Mysql : libz. so.1:无法打开共享对象文件:权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22473830/

相关文章:

mysql - 从 Homebrew 安装中禁用 MySQL "secure-file-priv"选项

python - 如何修改zabbix脚本?

linux - 适用于 Linux 的 Cocos2d-x 编辑器?

mysql - 查询异常 (42S22) SQLSTATE[42S22] : Column not found: 1054 Unknown column 'username'

sql - 外键 null - 性能下降

linux - 在linux中使用终端获取.raw音频文件的文件信息

linux - 转储 Intel HD Audio 硬件的硬件状态

r - install.packages() 由于内存不足而失败?

ubuntu - 从 Ubuntu 中删除 chromedriver

mysql - MySQL 中的大型唯一键