Dockerfile RUN命令

时间:2018-02-27 18:00:56

标签: docker dockerfile

我想在dockerfile中执行以下命令:

java -jar kafka-connect-cli-1.0.6-all.jar create cassandra-sink-orders < cassandra-sink-distributed-orders.properties

这是我尝试的但它给了我错误:

无法执行cassandra-sink-orders&lt; cassandra-sink-distributed-orders.properties

CMD ["java", "-jar", "kafka-connect-cli-1.0.6-all.jar", "create", "cassandra-sink-orders", "<", "cassandra-sink-distributed-orders.properties"]

2 个答案:

答案 0 :(得分:2)

使用<的输出重定向是一个shell功能。向CMD提供JSON列表时,shell不会执行该命令。

要使用shell功能,请使用以下格式之一:

CMD ["sh", "-c", "java -jar kafka-connect-cli-1.0.6-all.jar create cassandra-sink-orders < cassandra-sink-distributed-orders.properties"]
CMD java -jar kafka-connect-cli-1.0.6-all.jar create cassandra-sink-orders < cassandra-sink-distributed-orders.properties

来自documentation

  

CMD指令有三种形式:

     
      
  • CMD ["executable","param1","param2"] exec 表单,这是首选表单)
  •   
  • CMD ["param1","param2"](作为ENTRYPOINT的默认参数)
  •   
  • CMD command param1 param2 shell 表单)
  •   
     

[...]

     

注意:与shell表单不同,exec表单不会调用命令shell。这意味着不会发生正常的shell处理。例如,CMD [ "echo", "$HOME" ]不会对$HOME执行变量替换。如果您需要shell处理,则可以使用shell表单或直接执行shell,例如:CMD [ "sh", "-c", "echo $HOME" ]

答案 1 :(得分:0)

你也可以这样运行它:

CMD "java -jar kafka-connect-cli-1.0.6-all.jar create cassandra-sink-orders < cassandra-sink-distributed-orders.properties"