我有一个用于执行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

如果我注释掉羽绒服线,则构建运行良好。使用该图像,我可以创建一个容器,并使用bash,按预期方式运行luarocks。

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

谢谢。

最佳答案

每个RUN命令在其自己的Shell上运行,并提交一个新层。

从Docker文档中:



因此,当您运行luarocks install <app>时,它将与您获取个人资料的 shell 不同。

您必须提供完整的路径来运行羽绒被。参见下面我成功运行的修改后的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

关于docker - 某些RUN在docker上不起作用,但在容器中时会起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32916941/

10-16 16:02