linux – 为什么我必须在我的容器内使用bash -l -c?

linux – 为什么我必须在我的容器内使用bash -l -c?,第1张

概述我使用以下Dockerfile(截断)创建了一个docker容器: FROM ubuntu:12.04# curl enables downloading of other thingsRUN apt-get install curl -y# download and install rvm...RUN \curl -L https://get.rvm.io | bash -s stabl 我使用以下Dockerfile(截断)创建了一个docker容器:
FROM ubuntu:12.04# curl enables downloading of other thingsRUN apt-get install curl -y# download and install rvm...RUN \curl -L https://get.rvm.io | bash -s stable# ... so that we can install rubyRUN /bin/bash -l -c "rvm requirements"

等等.

这一切都有效,但我遇到的问题是如何/在哪里安装软件包.

如果我运行rvm使用docker运行[…] rvm我得到“无法找到rvm”,但是如果我运行docker运行[…] / bin / bash -l -c“rvm”它可以工作. (我在网上找到了“-l -c”选项,但不知道他们在做什么,找不到我正在做的令人满意的解释!)

这不是码头问题 – 这是一个bash / * nix问题 – 我认为有一些关于如何/在哪里安装的东西,可能与在根下运行安装有关?

只是为了清楚 – 我想要能够直接从Cli运行的东西.

编辑1

使用rvm安装Ruby是推荐的方法,但是如果要在非交互式非登录shell(即Docker容器)内运行东西,则只会导致路径和环境变量以及登录脚本不运行的麻烦太多.

鉴于我正在使用它来运行一个docker容器,根据定义是隔离的,可恢复的(只是构建另一个容器),我并不在乎切换版本或者隔离包,因此我决定安装Ruby从包裹回购(http://brightbox.com/docs/ruby/ubuntu/)代替.这个“工作”.

它可能不适用于您 – 我只安装Ruby,以获得Foreman宝石,因为我通过procfile运行应用程序,所以我不是那么讨厌细节,我只需要它的工作.如果您正在构建一个Ruby应用程序,我不会遵循我的建议.

我的Dockerfile在这里,FWIW,https://index.docker.io/u/yunojuno/dev/

解决方法 从 bash(1)

> -l使bash的行为好像被调用为登录shell一样
> -c如果存在-c选项,则从字符串读取命令.

您正在运行传递给-c参数的命令. -l使它成为一个登录shell,所以bash首先读取/ etc / profile,这可能有rvm的路径,这是什么使其工作.

FWIW,这里我做的是将rvm安装在docker容器中.

# Install some dependencIEsRUN apt-get -y -q install curl rubygems# Install rvmRUN curl -L https://get.rvm.io | bash -s stable# Install package dependencIEsRUN /usr/local/rvm/bin/rvm requirements# Install rubyRUN /usr/local/rvm/bin/rvm install ruby-2.0.0# create first wrapper scriptsRUN /usr/local/rvm/bin/rvm wrapper ruby-2.0.0 myapp rake rails gem
总结

以上是内存溢出为你收集整理的linux – 为什么我必须在我的容器内使用bash -l -c?全部内容,希望文章能够帮你解决linux – 为什么我必须在我的容器内使用bash -l -c?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1045179.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存