2014-09-04 7 views
5

Ich denke, es ist ein Umgebungsproblem. Wenn ich es manuell (ohne eine Dockerfile) mache, funktioniert es.Fehler beim Erstellen eines Docker-Image für die Ruby On Rails-Umgebung (von einer Docker-Datei)

Hier ist meine Dockerfile:

FROM ubuntu:14.04 
RUN apt-get update 
RUN apt-get upgrade --assume-yes 
RUN apt-get install wget vim git --assume-yes 
# install RVM 
RUN apt-get install build-essential curl --assume-yes 
RUN curl -L https://get.rvm.io | bash -s stable 
RUN echo 'source /etc/profile.d/rvm.sh' >> ~/.bashrc 
RUN /usr/local/rvm/bin/rvm-shell -c "rvm requirements" 
# install Ruby 
RUN /usr/local/rvm/bin/rvm-shell -c "rvm autolibs enable" 
RUN /usr/local/rvm/bin/rvm-shell -c "rvm install 2.1.2" 
# install Rails 
RUN echo "gem: --no-rdoc --no-ri" >> ~/.gemrc 
RUN gem install rails -v 4.1.5 
# install nodeJS 
RUN sudo apt-get install nodejs --assume-yes 
EXPOSE 3000 

als ich bauen mit:

sudo docker build -t="james/rails" . 

ich diesen Fehler:

Step 11 : RUN gem install rails -v 4.1.5 
---> Running in 44efc6b7c254 
/bin/sh: 1: gem: not found 
2014/09/04 18:33:52 The command [/bin/sh -c gem install rails -v 4.1.5] returned a non-zero code: 127 
+1

rvm Verwendung ohne eine Shell heikel ist. Der Punkt von rvm ist auch, mehrere Installationen von Ruby zu verwalten, und mit Docker brauchen Sie das nicht. Geh einfach mit einem Ruby-Basis-Image, zum Beispiel binaryphile/ruby ​​(https://registry.hub.docker.com/u/binaryphile/ruby/), oder du kannst mein rbenv-basiertes Image verwenden: cthulhu666/docker-rbenv (https://registry.hub.docker.com/u/cthulhu666/docker-rbenv/) wenn du es nicht magst, Dinge als root zu installieren (und ich rate dir, Dinge nicht als root zu installieren). Als eine Nebenbemerkung wird das Ausführen von 'apt-get upgrade' in Dockerfile als eine schlechte Übung angesehen. – cthulhu

Antwort

7

Versuchen RUN /bin/bash -l -c "gem install rails -v 4.1.5" statt der Zeile, die Sie dort haben. Ändert das etwas?

+1

Ich bekomme den gleichen Fehler. – James

+0

Was passiert, wenn Sie '/ bin/bash -l -c' oder einen ähnlichen'/bin/sh'-Befehl für alle RVM-Installationslinien verwenden? –

+0

Das funktioniert. Vielen Dank. – James

0

Sie müssen rubygems installieren, bevor es benutzen zu können, .

RUN apt-get install rubygems 

siehe auch: Can I install gems with apt-get on Ubuntu?

+2

RVM kümmert sich darum. – cthulhu

+0

Im Allgemeinen ist es eine schlechte Idee, RubyGems von aptitude zu installieren, Sie bitten um Probleme :) –

2

Mit Hilfe von Alex Lynham, hier ist ein Arbeits Dockerfile:

FROM ubuntu:14.04 

RUN apt-get update 
RUN apt-get install wget vim git --assume-yes 

# install RVM 
RUN apt-get install build-essential curl --assume-yes 
RUN curl -L https://get.rvm.io | bash -s stable 
RUN echo 'source /etc/profile.d/rvm.sh' >> ~/.bashrc 
RUN /usr/local/rvm/bin/rvm-shell -c "rvm requirements" 

# install Ruby 
RUN /bin/bash -l -c "rvm autolibs enable" 
RUN /bin/bash -l -c "rvm install 2.1.2" 

# install Rails 
RUN echo "gem: --no-rdoc --no-ri" >> ~/.gemrc 
RUN /bin/bash -l -c "gem install rails -v 4.1.5" 

# install nodeJS 
RUN sudo apt-get install nodejs --assume-yes 

EXPOSE 3000 
Verwandte Themen