我有一个在Debian jessie(内核3.16)上正常运行的docker镜像,当我将该图像移动到Ubuntu主机(内核3.13)时,postgresql无法启动。我在访问某个文件时将其缩小到行为差异,我唯一的解释是主机内核的差异。我想知道是否有人确认这是问题,或者对可能的不同根本原因有任何想法。 以下命令序列显示了该问题。首先是好的'主机:
root@lava-docker:/etc# ls -l /etc/ssl/private/ssl-cert-snakeoil.key
-rw-r----- 1 root ssl-cert 1708 Oct 20 19:31 /etc/ssl/private/ssl-cert-snakeoil.key
root@lava-docker:/etc# su - postgres
postgres@lava-docker:~$ ls -l /etc/ssl/private/ssl-cert-snakeoil.key
-rw-r----- 1 root ssl-cert 1708 Oct 20 19:31 /etc/ssl/private/ssl-cert-snakeoil.key
postgres@lava-docker:~$ ls -ld /etc/ssl/private
drwx--x--- 2 root ssl-cert 4096 Oct 20 19:31 /etc/ssl/private
postgres@lava-docker:~$ id
uid=110(postgres) gid=115(postgres) groups=115(postgres),114(ssl-cert)
现在“坏”的序列相同。主机:
root@lava-docker:/# ls -l /etc/ssl/private/ssl-cert-snakeoil.key
-rw-r----- 1 root ssl-cert 1708 Oct 20 19:31 /etc/ssl/private/ssl-cert-snakeoil.key
root@lava-docker:/# su - postgres
postgres@lava-docker:~$ ls -l /etc/ssl/private/ssl-cert-snakeoil.key
ls: cannot access /etc/ssl/private/ssl-cert-snakeoil.key: Permission denied
postgres@lava-docker:~$ ls -ld /etc/ssl/private
drwx--x--- 2 root ssl-cert 4096 Oct 20 19:31 /etc/ssl/private
postgres@lava-docker:~$ id
uid=110(postgres) gid=115(postgres) groups=115(postgres),114(ssl-cert)
可以看出,即使文件和目录权限相同,用户配置(毕竟是相同的docker镜像)也是如此,在一个postgres上用户可以看到它,但在另一个上却看不到。 此目录未使用卷选项装入,它位于aufs控制
下答案 0 :(得分:0)
这可能是aufs问题,无法使一个Docker层中的权限比下一层具有更少的限制。
https://github.com/moby/moby/issues/1295#issuecomment-269058662
解决方案似乎是不使用aufs。请改用overlay2。
或者,如果您具有Docker 17.09或更高版本,则可以在ADD / COPY上使用--chown标志。 https://stackoverflow.com/a/44766666/127670