Hug*_*own 21 linux bash shell docker
我使用以下Dockerfile创建了一个docker容器(截断):
FROM ubuntu:12.04
# curl enables downloading of other things
RUN apt-get install curl -y
# download and install rvm...
RUN \curl -L https://get.rvm.io | bash -s stable
# ... so that we can install ruby
RUN /bin/bash -l -c "rvm requirements"
等等.
这一切都有效,但我遇到的问题是如何/在何处安装软件包.
如果我只是运行rvm docker run [...] rvm我得到"无法找到rvm",但如果我运行docker run [...] /bin/bash -l -c "rvm"它的工作原理.(我在网上找到了"-l -c"选项,但不知道他们做了什么,也无法找到我正在做的令人满意的解释!)
这不是一个码头问题 - 这是一个bash/*nix问题 - 我假设有一些关于如何/在哪里安装的东西,可能与在root下运行安装有关?
需要明确的是 - 我希望能够直接从CLI运行我安装的东西.
编辑1
安装Ruby使用RVM是推荐的方法,但是如果你想运行在非交互式,非登陆shell的东西(即泊坞窗的容器内),这只是导致与路径和环境变量和登录脚本不运行太多的麻烦.
鉴于我正在使用它来运行一个docker容器,根据定义它是可隔离的,并且可以恢复(只是构建另一个),我真的不关心切换版本,还是隔离包,所以我决定安装Ruby来自包裹仓库(http://brightbox.com/docs/ruby/ubuntu/).这'只是有效'.
它可能不适合你 - 我只是安装Ruby以获得Foreman gem,因为我正在通过Procfile运行应用程序,所以我不是对细节感到困惑,我只是需要它才能工作.如果你正在构建一个Ruby应用程序,我不会听从我的建议.
我的Dockerfile在这里,FWIW,https: //index.docker.io/u/yunojuno/dev/
Ben*_*ley 31
来自bash(1):
-l 使bash行为就好像它已被作为登录shell调用一样-c 如果存在-c选项,则从字符串中读取命令. 您正在运行传递给-c参数的命令.-l使它成为一个登录shell,所以bash首先读取/etc/profile,这可能有rvm使其工作的路径.
FWIW,这是我rvm在docker容器中安装的内容.
# Install some dependencies
RUN apt-get -y -q install curl rubygems
# Install rvm
RUN curl -L https://get.rvm.io | bash -s stable
# Install package dependencies
RUN /usr/local/rvm/bin/rvm requirements
# Install ruby
RUN /usr/local/rvm/bin/rvm install ruby-2.0.0
# create first wrapper scripts
RUN /usr/local/rvm/bin/rvm wrapper ruby-2.0.0 myapp rake rails gem