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

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 conforme espera ser iniciado a partir do diretório atual. O que posso fazer?

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

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

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

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

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

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

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

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:

Eu tenho um exemplo semelhante deste site https://djangostars.com/blog/what-is-docker-and-how-to-use-it-with-python/#header13:

docker run -d --name "test-nginx" -p 8080:80 -v $(pwd):/usr/share/nginx/html:ro nginx:latest

Este comando não funciona no Git Bash e no Windows.

A solução era usar cd em vez de $(pwd):

docker run -d --name "test-nginx" -p 8080:80 -v cd:/usr/share/nginx/html:ro nginx:latest