我正在尝试创建一个将部署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时,它会说没有这样的文件或目录。它如何成功构建但不链接我告诉它的文件?
答案 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)