Por que não consigo fazer o cd para um diretório com docker run?


39

Eu preciso executar um aplicativo de um diretório 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

Esse diretório definitivamente existe e, se eu me conectar ao docker executando o bash interativamente, posso executar o comando acima.

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

Posso executar meu programa especificando o caminho completo, mas ele trava, pois espera ser iniciado a partir do diretório atual. O que eu posso fazer?

Respostas:


34

Passe seu comando como argumento para / bin / sh assim:

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

docker execute centos / bin / sh -c 'cd / bin; / bin / ls 'não imprime nada, enquanto o docker executa centos / bin / sh -c' / bin / ls / bin '.
seanmcl

Na verdade, ambos os comandos exibem a lista de arquivos no diretório / bin. Tentei ambos.
Glueon

Não está na minha caixa, centos7.
seanmcl

1
Na verdade, mesmo remover as aspas ao redor do meu comando para executar funcionou bem. Eu acho que o docker o envolve de /bin/sh -cqualquer maneira.
schmmd

85

Você pode usar a -wopção para alterar seu diretório de trabalho.

docker run

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

Então, no seu caso, você executaria:

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

Eu poderia usar -wcom docker exec? Estou procurando uma maneira de executar o script python no meu contêiner, mas não posso pará-lo fora do contêiner.
Zx1986

ah, eu recebi a resposta .... #flag provided but not defined: -w
234 zx1986

1
Droga, por que isso está escondido na parte inferior da página de referência da execução do docker ! :-)
Amir Abiri

5
Esta deve ser a resposta aceita
fferri

4

Use WORKDIR no seu Dockerfile para definir o diretório de trabalho. Então você pode executar seu comando com EXEC.


0

Isso pode ser devido ao problema de permissão ou a instância não consegue encontrar o caminho disponível executável. Para verificar isso, tente adicionar o local disponível executável no caminho e tente executar o script

para adicionar o diretório atual no caminho, use o comando abaixo

$ export PATH=$PATH:
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.