He creado una ventana acoplable contenedor utilizando la siguiente Dockerfile (trunca):

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"

Y así sucesivamente.

Funciona esto, pero el problema que tengo es cómo /dónde se instalarán los paquetes.

Si tengo rvm utilizando docker run [...] rvm me sale «no se puede localizar rvm», pero si me quedo docker run [...] /bin/bash -l -c "rvm" funciona. (He encontrado la opción «-l -c» opciones de internet, pero no tienen idea de lo que hacen, y no puede encontrar una explicación satisfactoria de lo que estoy haciendo!)

Esto no es una ventana acoplable pregunta – es un bash /*nix pregunta – supongo que hay algo acerca de cómo /dónde están las cosas instalado, posiblemente relacionadas con la ejecución de la instalación bajo root?

Para que quede claro, quiero ser capaz de ejecutar las cosas que puedo instalar directamente desde la CLI.

EDITAR 1

La instalación de Ruby usando rvm es el método recomendado, sin embargo, si desea ejecutar cosas en un no-interactivos, no-shell de inicio de sesión (es decir dentro de un contenedor docker), esto solo causa demasiados problemas con los caminos y las variables de entorno y scripts de inicio de sesión no se ejecuta.

Dado que estoy usando esto para ejecutar una ventana acoplable contenedor, que por definición es aislado, y recuperables (sólo construir otro), yo realmente no se preocupan por cambiar de versión, o aislar a los paquetes, y por eso me he decidido a instalar Ruby de un paquete de repo (http://brightbox.com/docs/ruby/ubuntu/) en su lugar. Esta «simplemente funciona».

Puede que no funcione para usted – sólo estoy instalando Ruby con el fin de obtener el Capataz de la gema, como estoy ejecutando una aplicación a través de una Procfile, así que no tengo que agitaba por los detalles, solo necesito que funcione. Si usted está construyendo un Rubí de la aplicación, no me siga mi consejo.

Mi Dockerfile es aquí, por lo que vale, https://index.docker.io/u/yunojuno/dev/

  • usted debe incluir la salida de type -ap rvm y echo $PATH

1 Comentario

  1. 30

    De bash(1):

    • -l Hacer bash actuar como si hubiera sido invocado como un shell de inicio de sesión
    • -c Si la opción-c está presente, entonces los comandos de lectura de la cadena.

    Estás ejecutando el comando pasa a la -c argumento. -l hace un shell de inicio de sesión por lo que bash lee primero /etc/profile, que tiene probablemente la ruta de acceso a rvm que es lo que la hace funcionar.

    Por lo que vale, aquí es lo que tengo que hacer para instalar rvm en una ventana acoplable contenedor.

    # 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
    • Yup – eso es todo – gracias. Si me quedo docker run [...] bash -l desde el host de entrar en el contenedor con una cubierta que funciona – env variables set etc. Así es lograr que los comandos para que se ejecuten dentro de un shell de inicio de sesión cuando me pase a la ventana acoplable comando ejecutar ese es mi desafío.
    • Quizás es sólo sys admin hábito, pero normalmente me gusta dar rutas de acceso completos para todo. De esa manera usted (esperemos) sé lo que estás ejecutando.
    • Sí – que es lo que acabo de hacer – se me pegaba a él. Y supongo que, dado que la clave de la ventana acoplable es la repetición y la reutilización, el yo no necesita preocuparse de que las cosas no están donde deben estar – como ellos siempre van a estar exactamente en el mismo lugar que la última vez.
    • Por supuesto – ahora me estoy poniendo ruby errores: /usr/bin/env: ruby_executable_hooks: No existe el fichero o el directorio
    • Si hago esto y tratar de hacer EJECUTAR joya, luego me sale un error de la gema no se encuentra. En mi humilde opinión, es más fácil recordar el /bin/bash -l -c «» en lugar de tratar de recordar las rutas de donde todo lo demás.

Dejar respuesta

Please enter your comment!
Please enter your name here