是否可以在docker文件的中间执行cmd?

yqkkidmi  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(305)

我正在使用docker安装hadoop-0.20.2。我有两个文件,一个是java安装,另一个是hadoop安装。我正在使用cmd命令启动服务

cmd ["path/to/start-all.sh"]

现在,我想编写第三个dockerfile,它执行一个示例map reduce作业。但问题是
第三个docker文件依赖于第二个hadoop docker文件。例如:

FROM sec_doc_file

 RUN /bin/hadoop fs -mkdir input

它需要hadoop服务。但是hadoop服务只有在运行第二个docker文件之后才能启动。但我想在开始mr job之前把它作为第三个docker文件的一部分运行?有可能吗?如果是,请举例说明。如果没有,还有什么可能?


# something like

 From sec_doc_file

 #Start_Service

 RUN /bin/hadoop fs -mkdir input

 #continue_map_reduce_job
kuarbcqp

kuarbcqp1#

作为新容器基础的docker映像是文件的基础,而不是应该运行的进程的基础。要做您想做的事情,您需要在dockerbuild期间启动所需的进程,并运行命令以正确设置。每个 RUN 创建一个新的aufs层,但不保留以前可能运行的服务。因此,如果您需要一个服务来执行一些设置过程中 docker build 您需要在一行中运行它(连接命令或使用自定义脚本)。例子:

FROM Gops/sec_doc_file
RUN path/to/start-all.sh && /bin/hadoop fs -mkdir input

因此,为了在docker构建期间设置hdfs文件夹和文件,您需要运行hdfs守护进程并以同样的方式执行所需的操作 RUN 命令:

RUN /etc/hadoop/hadoop-env.sh &&\
    /opt/hadoop/sbin/start-dfs.sh &&\
    /opt/hadoop/bin/hdfs dfs -mkdir input

相关问题