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

schmmd
fuente

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'
Glueon
fuente
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
Vojtech Vitek
fuente
¿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.

Randall Smith
fuente
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:

fuente