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