Почему я не могу перейти к каталогу с помощью docker run?

Мне нужно запустить приложение из определенного каталога.

$ 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

Этот каталог определенно существует, и если я подключусь к docker, запустив bash в интерактивном режиме, я смогу выполнить приведенную выше команду.

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

Я могу запустить свою программу, указав полный путь, но затем она выходит из строя, поскольку ожидает запуска из текущего каталога. Что я могу сделать?

Вы можете использовать -w возможность изменить свой рабочий каталог.

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

Итак, в вашем случае вы бы побежали:

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

Передайте свою команду в качестве аргумента в /bin/sh следующим образом:

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

Используйте WORKDIR в вашем Dockerfile, чтобы задать рабочий каталог. Затем вы можете запустить свою команду с помощью EXEC.

Возможно, это связано с проблемой разрешения или экземпляру не удается найти доступный путь к исполняемому файлу. Чтобы проверить это, попробуйте добавить доступное местоположение исполняемого файла в path и попробуйте запустить скрипт

чтобы добавить текущий каталог в path, пожалуйста, используйте приведенную ниже команду

$ export PATH=$PATH:

У меня есть аналогичный пример с этого сайта 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

Эта команда не работает в Git Bash и Windows.

Решение состояло в том, чтобы использовать cd вместо $(pwd):

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