¿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.