基于主机目录的Docker卷仅包含root拥有的文件(用户不拥有),还包含其他一些随机文件

时间:2019-06-10 00:06:54

标签: docker-compose

我要使用docker-compose.yml文件在容器中挂载主机目录。首先,我检查了是否要覆盖容器中的重要内容:

# ls -al /etc/ssl
total 12
drwxr-xr-x 3 root root 4096 Jun  4 22:29 .
drwxr-xr-x 1 root root 4096 Jun  9 23:38 ..
drwxr-xr-x 2 root root 4096 Jun  4 22:29 certs

容器中的certs子目录如何?

# ls -al /etc/ssl/certs
total 8
drwxr-xr-x 2 root root 4096 Jun  4 22:29 .
drwxr-xr-x 3 root root 4096 Jun  4 22:29 ..

好,一切都清楚。

这是我打算从主机挂载的主机目录:

$ ls -al /etc/ssl
total 232
drwxr-xr-x   11 root           wheel     352 Jun  9 15:10 .
drwxr-xr-x  119 root           wheel    3808 Jun  9 14:21 ..
-rw-r--r--@   1 cameronhudson  wheel     466 Jun  9 14:32 README.md
drwxr-xr-x    5 cameronhudson  wheel     160 Jun  9 15:09 cameronhudson.info
drwxr-xr-x    4 cameronhudson  wheel     128 Jun  9 15:09 cameronhudson8.com
-rw-r--r--    1 root           wheel  196928 Mar 20 22:24 cert.pem
drwxr-xr-x    2 root           wheel      64 Aug 17  2018 certs
drwxr-xr-x    5 cameronhudson  wheel     160 Jun  9 15:09 iskprinter.com
drwxr-xr-x    5 cameronhudson  wheel     160 Jun  9 15:09 kronn8.com
-rw-r--r--    1 root           wheel     745 Aug 17  2018 openssl.cnf
-rw-r--r--    1 root           wheel    1006 Aug 17  2018 x509v3.cnf

如我们所见,该目录包含文件和目录的混合,其中一些由cameronhudson拥有,另一些由root拥有。

这是我正在使用的docker-compose.yml文件:

version: "3.7"
services:
  webserver:
    image: nginx
    volumes:
      - /etc/ssl:/etc/ssl

以主机用户docker-compose up --build身份执行cameronhudson后,容器内的/etc/ssl目录的外观如下:

# ls -al /etc/ssl
total 259
drwxr-xr-x 1 root root     60 Feb 13 10:28 .
drwxr-xr-x 1 root root   4096 Jun  9 23:44 ..
-rw-r--r-- 1 root root 232598 Jan 29 16:27 cert.pem
drwxr-xr-x 1 root root     60 Feb 13 10:29 certs
-rw-r--r-- 1 root root    414 Dec 17 16:36 ct_log_list.cnf
-rw-r--r-- 1 root root    414 Dec 17 16:36 ct_log_list.cnf.dist
drwxr-xr-x 2 root root   2048 Feb 13 10:28 misc
-rw-r--r-- 1 root root  10911 Dec 17 16:36 openssl.cnf
-rw-r--r-- 1 root root  10911 Dec 17 16:36 openssl.cnf.dist
drwxr-xr-x 2 root root   2048 Feb 13 10:28 private

这很奇怪。您会注意到一些事情:

  • cameronhudson拥有的主机上没有文件。
  • root拥有的主机上的所有文件都存在。
  • 主机目录中根本不存在其他文件,例如ct_log_list.cnf(一个文件)和private(一个空目录)。

我在主机上以cameronhudson的身份运行Docker(没有sudo)。如果容器中的文件由cameronhudson专有,那是可以理解的。但是,相反的情况是-以cameronhudson的身份运行容器并可以访问root独有的文件-我根本不明白...

如何访问主机目录中的所有文件?理想情况下,摆脱这些ct_log_list.cnf之类的随机文件也将很不错...

1 个答案:

答案 0 :(得分:0)

我认为这是行不通的,因为etc目录是一个符号链接,并且Docker默认不遵循符号链接。

Camerons-Air:IskPrinter-Site cameronhudson$ ls -al / | grep etc
lrwxr-xr-x@   1 root  wheel     11 Oct 27  2018 etc -> private/etc

但是,这不能解释缺少某些文件以及容器中出现其他随机文件的情况。另一回我试图让Docker跟随符号链接时,它只是给出一个错误,指出该目录或文件不存在。