Мне нужно запустить приложение из определенного каталога.
$ 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
Этот каталог определенно существует, и если я подключусь к докеру, запустив 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.
Это может быть связано с проблемой разрешения или экземпляру не удается найти доступный путь к исполняемому файлу. Чтобы проверить это, попробуйте добавить доступное место для исполняемого файла в путь и попробуйте запустить скрипт.
чтобы добавить текущий каталог в путь, используйте следующую команду
$ 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