¿Por qué no puedo cd a un directorio con Docker Run?


39

Necesito ejecutar una aplicación desde un directorio específico.

$ sudo docker run -P ubuntu/decomposer 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'
2014/10/09 21:30:03 exec: "cd /local/deploy/decomposer; ./decomposer-4-15-2014": stat cd /local/deploy/decomposer; ./decomposer-4-15-2014: no such file or directory

Ese directorio definitivamente existe, y si me conecto a Docker ejecutando bash de manera interactiva, puedo ejecutar el comando anterior.

$ sudo docker run -i -t ubuntu/decomposer /bin/bash
# cd /local/deploy/decomposer; ./decomposer-4-15-2014

Puedo ejecutar mi programa especificando la ruta completa, pero luego se bloquea ya que se espera que se inicie desde el directorio actual. ¿Que puedo hacer?

Respuestas:


34

Pase su comando como argumento a / bin / sh así:

sudo docker run -P ubuntu/decomposer /bin/sh -c 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'

Docker ejecuta centos / bin / sh -c 'cd / bin; / bin / ls 'no imprime nada, mientras que Docker ejecuta centos / bin / sh -c' / bin / ls / bin 'funciona.
— seanmcl

En realidad, ambos comandos generan la lista de archivos en el directorio / bin. Probé los dos.
— Glueon

No en mi caja, centos7.
— seanmcl

1
En realidad, incluso solo eliminar las comillas alrededor de mi comando para ejecutar funcionó bien. Creo que Docker lo envuelve de /bin/sh -ctodos modos.
— schmmd

85

Puede usar la -wopción para cambiar su directorio de trabajo.

docker run

  -w, --workdir=""           Working directory inside the container

Entonces, en su caso, correría:

sudo docker run -w /local/deploy/decomposer -P ubuntu/decomposer ./decomposer-4-15-2014

¿Puedo usar -wcon docker exec? Estoy buscando una manera de ejecutar el script python en mi contenedor, pero no puedo detenerlo fuera del contenedor.
— zx1986

oh, recibí la respuesta ...flag provided but not defined: -w
— zx1986

1
¡Maldita sea, por qué se ha estado ocultando todo esto en la parte inferior de la página de referencia de la ventana acoplable ! :-)
— Amir Abiri

55
Esta debería ser la respuesta aceptada
— fferri

4

Use WORKDIR en su Dockerfile para establecer el directorio de trabajo. Entonces puede ejecutar su comando con EXEC.


0

Esto podría deberse a un problema de permiso o la instancia no puede encontrar la ruta disponible ejecutable. Para verificar esto, intente agregar la ubicación disponible ejecutable en la ruta e intente ejecutar el script

para agregar el directorio actual en la ruta, utilice el siguiente comando

$ export PATH=$PATH:
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.