将红宝石提供给Debian9图像时出现问题

时间:2019-06-21 08:46:08

标签: ruby linux docker authentication

我已按照these的说明在ruby映像上安装debian9(我需要ruby的旧版本,即2.1.5

我还包括一个额外的步骤,以便在登录所有用户后即可使用它,即

echo "source /etc/profile.d/rvm.sh >> /etc/profile"

现在,当我登录到终端后运行容器时,ruby可用:

$ docker run -ti registry/container:tag bash
root@f6805551226c:/# ruby -v
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]

但是,当我在没有显式登录的情况下运行容器时,ruby显然不可用,因为该文件不是源文件

docker run -it registry/container:tag ruby -v
docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"ruby\": executable file not found in $PATH": unknown.

我该如何解决?

2 个答案:

答案 0 :(得分:0)

/etc/profile仅在用户登录到外壳程序时有效:

docker run -it registry/container:tag ruby -v只会将ruby -v设置为容器的PID1,而不是将shell用作容器的PID1,因此/etc/profile将无法正常工作。

仅下一个可行:

docker run -it registry/container:tag bash -c "ruby -v"

使用docker run -ti registry/container:tag bash时,PID1是bash,因此/etc/profile会生效,因此您可以在路径中放置红宝石。

答案 1 :(得分:0)

通过使用ENV指令并自行设置PATH变量来检查是否可以解决这些问题。它在以下问题上对我有用:Why dockered centos doesn't recognize pip?,在实践中,Docker文档中也提到了它:

  

Best practices for writing Dockerfiles

     

ENV

     

要使新软件更易于运行,可以使用ENV为容器安装的软件更新PATH环境变量。例如,ENV PATH /usr/local/nginx/bin:$PATH确保CMD ["nginx"]正常工作。