如何链接Dockerfile中的文件?

时间:2014-07-07 22:43:53

标签: ruby-on-rails docker

我正在尝试创建一个将部署rails app的Dockerfile,但如果我使用docker文件,我的问题就是ruby不会安装。它说/ dev / fd丢失了。在普通机器上我所要做的就是输入命令ln -sf /proc/self/fd /dev/fd并且所有都是固定的。但是,当我将该命令放入我的Dockerfile时,它并没有链接到/ dev / fd。这是我的Dockerfile:

# Select ubuntu as the base image
FROM ubuntu

# Install nginx, nodejs and curl
RUN apt-get update -q
RUN apt-get install -qy nginx
RUN apt-get install -qy curl
RUN apt-get install -qy nodejs
RUN echo "daemon off;" >> /etc/nginx/nginx.conf

# Install rvm, ruby, bundler
RUN curl -sSL https://get.rvm.io | bash -s stable
RUN ln -sf /proc/self/fd /dev/fd
RUN echo "source /usr/local/rvm/scripts/rvm" >> /etc/bash.bashrc
RUN /bin/bash -l -c "rvm requirements"
RUN /bin/bash -l -c "rvm install 2.1.2"

我会收到类似/ dev / fd的错误:丢失文件或文件夹或类似的东西。如果我省略了最后一行,那么所有内容都会成功构建,但是当我登录到刚刚构建的映像并进入/ dev / fd时,它会说没有这样的文件或目录。它如何成功构建但不链接我告诉它的文件?

4 个答案:

答案 0 :(得分:4)

我尝试使用您运行的命令,并尝试生成/dev/fs/fs

尝试以下操作在/dev/

中创建符号链接
RUN ln -sf /proc/self/fd /dev/

答案 1 :(得分:1)

我的2美分:我鼓励您使用以前创建的容器,如果您想混合使用的东西只是从您想要安装的服务中读取Dockerfiles我确定您会找到您的路径,但我仍然建议不要重新发明轮式码头用于重新利用,并且已经有nginx和ruby容器。另外我认为在docker中安装rvm不是一个好主意,如果你只需要一个不同的ruby版本,你只需要下载一个你想要的特定版本的容器。

答案 2 :(得分:0)

您可以尝试在没有rvm的情况下安装ruby。由于您使用的是docker容器,因此它已经被隔离,在此上下文中使用rvm将不会得到太多(或任何)。

您可以尝试从索引上的基础红宝石图像构建图像,例如1uptalent/ruby-2.1免责声明:这是我公司设置的自动构建)或借用{{3 }}。然后只需在其上添加rails应用程序。

答案 3 :(得分:0)

我正在像在Dockerfiles中那样创建链接 - 但不在/dev FS上创建。

您在容器中,可以修改dev FS,但是当您从创建的图像重新启动容器时,它会被替换。请参阅运行容器中的mount:

tmpfs on /dev type tmpfs (rw,nosuid,mode=755)