我要使用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
之类的随机文件也将很不错...
答案 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跟随符号链接时,它只是给出一个错误,指出该目录或文件不存在。