是否有可能在docker文件的中间执行CMD?

我正在使用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作业之前将它作为第三个docker文件的一部分运行? 可能吗? 如果是这样,请举个例子。 如果不是,其他的可能性是什么?

  #something like From sec_doc_file #Start_Service RUN /bin/hadoop fs -mkdir input #continue_map_reduce_job 

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

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

因此,在Docker构build期间设置HDFS文件夹和文件,您需要运行hdfs守护进程,并在同一个RUN命令中执行所需的操作:

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