Docker-Compose卷未递归安装

时间:2018-11-30 23:37:16

标签: docker docker-compose symlink

我有一个包含以下卷映射的docker compose文件。

volumes:
    - /opt/cloudera/parcels/SPARK2/lib/spark2:/opt/cloudera/parcels/SPARK2/lib/spark2

此目录的内容是:

rwxr-xr-x 13 root root   247 Nov 30 16:39 .
drwxr-xr-x  3 root root    20 Jan  9  2018 ..
drwxr-xr-x  2 root root  4096 Jan  9  2018 bin
drwxr-xr-x  2 root root    39 Jan  9  2018 cloudera
lrwxrwxrwx  1 root root    16 Jan  9  2018 conf -> /etc/spark2/conf ***
drwxr-xr-x  5 root root    50 Jan  9  2018 data
drwxr-xr-x  4 root root    29 Jan  9  2018 examples
drwxr-xr-x  2 root root  8192 May 22  2018 jars
drwxr-xr-x  2 root root   204 Jan  9  2018 kafka-0.10
drwxr-xr-x  2 root root   201 Jan  9  2018 kafka-0.9
-rw-r--r--  1 root root 17881 Jan  9  2018 LICENSE
drwxr-xr-x  2 root root  4096 Jan  9  2018 licenses
-rw-r--r--  1 root root 24645 Jan  9  2018 NOTICE
drwxr-xr-x  6 root root   204 Jan  9  2018 python
-rw-r--r--  1 root root  3809 Jan  9  2018 README.md
-rw-r--r--  1 root root   313 Jan  9  2018 RELEASE
drwxr-xr-x  2 root root  4096 Jan  9  2018 sbin
lrwxrwxrwx  1 root root    20 Jan  9  2018 work -> /var/run/spark2/work
drwxr-xr-x  2 root root    52 Jan  9  2018 yarn

值得注意的是已加星标的conf目录,它本身是一系列符号链接,这些链接最终指向包含以下内容的/etc/spark2/conf.cloudera.spark2_on_yarn文件夹:

drwxr-xr-x 3 root  root    194 Nov 30 16:39 .
drwxr-xr-x 3 root  root     54 Nov 12 14:45 ..
-rw-r--r-- 1 root  root  13105 Sep 16 03:07 classpath.txt
-rw-r--r-- 1 root  root     20 Sep 16 03:07 __cloudera_generation__
-rw-r--r-- 1 root  root    148 Sep 16 03:07 __cloudera_metadata__
-rw-r--r-- 1 ember 10000  2060 Nov 30 16:33 envars.test
-rw-r--r-- 1 root  root    951 Sep 16 03:07 log4j.properties
-rw-r--r-- 1 root  root   1837 Sep 16 03:07 spark-defaults.conf
-rw-r--r-- 1 root  root   2331 Sep 16 03:07 spark-env.sh
drwxr-xr-x 2 root  root    242 Sep 16 03:07 yarn-conf

映射spark2目录时,仅显示yarn-conf子文件夹,缺少spark-env.sh文件和其他文件。

是一系列导致这些文件缺失的符号链接吗?如果是这样,我是否需要为每个文件夹明确设置一个映射,以使所有必需的依赖项都显示出来?我的印象是,docker-compose卷将以递归方式将所有文件/文件夹安装在特定目录下。

2 个答案:

答案 0 :(得分:2)

绑定安装应该忠实地复制主机的内容:容器内部的conf应该是指向/etc/spark2/conf的符号链接。容器在该路径上可能没有任何东西,但是Docker不会递归搜索绑定安装的树,并尝试使用符号链接做任何特殊的事情。

您是否要使用docker run -v在容器中“安装” Spark发行版?您可以使用所需的软件构建一个独立的Docker映像,然后使用绑定安装仅注入配置文件,这样可能会更好。可能看起来像

docker run \
  -v /etc/spark2/conf:/spark/conf \
  -v $PWD/spark:/spark/work \
  mysparkimage

答案 1 :(得分:1)

可能会重复this question。简而言之,符号链接在Docker容器中不能很好地工作。