Docker-不以递归方式安装的组合卷
Docker-Compose Volumes not Mounting Recursively
我有一个 docker 包含以下卷映射的组合文件。
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 卷会递归地将所有 files/folders 安装在特定目录下。
可能重复。简而言之,符号链接在 docker 容器中不能很好地工作。
绑定挂载应该忠实地再现宿主的内容:容器内的conf
应该是符号link到/etc/spark2/conf
。容器在该路径上可能有也可能没有任何东西,但 Docker 不会递归搜索绑定安装的树并尝试使用 symlinks 做任何特殊的事情。
您是否尝试在您的容器中使用 docker run -v
至 "install" Spark 分布?你最好用你想要的软件构建一个独立的 Docker 镜像,然后使用绑定挂载来只注入配置文件。这可能看起来像
docker run \
-v /etc/spark2/conf:/spark/conf \
-v $PWD/spark:/spark/work \
mysparkimage
我有一个 docker 包含以下卷映射的组合文件。
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 卷会递归地将所有 files/folders 安装在特定目录下。
绑定挂载应该忠实地再现宿主的内容:容器内的conf
应该是符号link到/etc/spark2/conf
。容器在该路径上可能有也可能没有任何东西,但 Docker 不会递归搜索绑定安装的树并尝试使用 symlinks 做任何特殊的事情。
您是否尝试在您的容器中使用 docker run -v
至 "install" Spark 分布?你最好用你想要的软件构建一个独立的 Docker 镜像,然后使用绑定挂载来只注入配置文件。这可能看起来像
docker run \
-v /etc/spark2/conf:/spark/conf \
-v $PWD/spark:/spark/work \
mysparkimage