有些RUN不会在码头工作,但会在集装箱内

时间:2015-10-02 22:48:06

标签: docker dockerfile luarocks

我已经获得了一些用于lua和火炬相关任务的Dockerfile,并且我试图使用luarocks安装一些岩石。

FROM ubuntu:14.04
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

RUN apt-get update -y
RUN apt-get install -y curl git

RUN curl -s https://raw.githubusercontent.com/torch/ezinstall/master/install-deps | bash
RUN git clone https://github.com/torch/distro.git ~/torch --recursive
RUN cd ~/torch; ./install.sh

RUN source ~/.bashrc

RUN luarocks install nngraph
RUN luarocks install optim
RUN luarocks install nn

RUN luarocks install cltorch
RUN luarocks install clnn

docker build运行正常,直到第一个luarocks调用:RUN luarocks install nngraph,此时它停止并抛出错误:

/bin/sh: luarocks: command not found

如果我注释掉了luarocks线,那么构建运行正常。使用该图像,我可以创建一个容器并使用bash,按预期运行luarocks。

当然,每次启动容器时,我都不是特别想要这样做,所以我想知道我能做些什么来完成这项工作。我觉得这个问题与行RUN rm /bin/sh && ln -s /bin/bash /bin/sh有关但我需要能够运行RUN source ~/.bashrc行。

感谢。

2 个答案:

答案 0 :(得分:4)

每个RUN命令都在自己的shell上运行,并且提交了一个新层。

来自Docker文档:

  

RUN(命令在shell中运行 - / bin / sh -c - shell   形式)

因此,当您运行luarocks install <app>时,它将与您提供个人资料的外壳不同。

您必须提供运行luarocks的完整路径。请参阅下面我成功运行的修改过的Dockerfile:

FROM ubuntu:14.04
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

RUN apt-get update -y
RUN apt-get install -y curl git

RUN curl -s https://raw.githubusercontent.com/torch/ezinstall/master/install-deps | bash
RUN git clone https://github.com/torch/distro.git ~/torch --recursive
RUN cd ~/torch; ./install.sh

RUN source ~/.bashrc

RUN /root/torch/install/bin/luarocks install nngraph
RUN /root/torch/install/bin/luarocks install optim
RUN /root/torch/install/bin/luarocks install nn
RUN /root/torch/install/bin/luarocks install cltorch
RUN /root/torch/install/bin/luarocks install clnn

有关详细信息,请参阅docker RUN文档here

答案 1 :(得分:2)

正如Alex da Silva指出的那样,源代码.bashrc发生在你的Dockerfile中的另一个shell中。

您也可以尝试使用源bashrc在同一个shell中执行luarocks命令:

...
RUN source ~/.bashrc && luarocks install nngraph
RUN source ~/.bashrc && luarocks install optim
RUN source ~/.bashrc && luarocks install nn

RUN source ~/.bashrc && luarocks install cltorch
RUN source ~/.bashrc && luarocks install clnn