2015-05-18 31 views
1

我想在Dockerfile中运行带有特殊参数(如$ _)的bash命令。 我试过下面的例子,但它似乎不工作。如果我直接在bash中执行相同的命令,它就像魅力一样。有谁知道我做错了什么?Dockerfile:使用特殊参数的运行命令

$ RUN mkdir /foo && cd $_ && pwd 
+0

你可以尝试用'运行的bash -c“的mkdir /富&& cd $ _ && pwd'' – VonC

回答

5

它取决于基本容器中的shell。 Ubuntu是使用例如仪表板,改变默认的shell来砸帮助得到结果是你所期望:

FROM ubuntu 
RUN rm /bin/sh && ln -s /bin/bash /bin/sh 
RUN mkdir /foo && cd $_ && pwd 

结果:

docker build --rm . 
Sending build context to Docker daemon 2.048 kB 
Sending build context to Docker daemon 
Step 0 : FROM ubuntu 
---> d0955f21bf24 
Step 1 : RUN rm /bin/sh && ln -s /bin/bash /bin/sh 
---> Using cache 
---> c90ef9fd9710 
Step 2 : RUN mkdir /foo && cd $_ && pwd 
---> Running in 8e1d943a6b60 
/foo 
---> 1871918ee02c 
Removing intermediate container 8e1d943a6b60 
Successfully built 1871918ee02c 
+0

感谢您的回答。我不知道使用不同shell实现的debian像distros。替换syslink正在解决我的需求。你知道是否有$ _参数的Dash相当于? –

+0

只有当它是交互式时,才会设置_变量,我不知道在非交互式破折号会话中使用$ _的方法。 – ISanych