Dockerfile:使用特殊参数运行命令

Dockerfile:使用特殊参数运行命令,docker,dockerfile,Docker,Dockerfile,我想在Dockerfile中运行带有特殊参数的bash命令,如$。 我尝试了下面的例子,但似乎不起作用。如果我直接在bash中执行相同的命令,它的工作方式就像一个符咒。有人知道我做错了什么吗 $ RUN mkdir /foo && cd $_ && pwd 它取决于基本容器中的外壳。ubuntu正在使用dash,例如,将默认shell更改为bash有助于获得您期望的结果: FROM ubuntu RUN rm /bin/sh && ln -s /

我想在Dockerfile中运行带有特殊参数的bash命令,如$。 我尝试了下面的例子,但似乎不起作用。如果我直接在bash中执行相同的命令,它的工作方式就像一个符咒。有人知道我做错了什么吗

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

它取决于基本容器中的外壳。ubuntu正在使用dash,例如,将默认shell更改为bash有助于获得您期望的结果:

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

它取决于基本容器中的外壳。ubuntu正在使用dash,例如,将默认shell更改为bash有助于获得您期望的结果:

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

您可以尝试使用
运行bash-c'mkdir/foo&&cd$&&pwd'
您可以尝试使用
运行bash-c'mkdir/foo&&cd$&&pwd'
谢谢您的回答。我不知道debian喜欢使用不同的shell实现的发行版。更换syslink解决了我的需求。你知道是否有一个与$参数相当的破折号吗?只有当它是交互式的时候,破折号设置才是变量,我不知道在非交互式破折号会话中使用$的方法。谢谢你的回答。我不知道debian喜欢使用不同的shell实现的发行版。更换syslink解决了我的需求。你知道是否有一个与$参数相当的破折号吗?只有当它是交互式的时候,破折号设置变量才是,我不知道在非交互式破折号会话中使用$的方法。