Почему я не могу перейти в каталог с Docker?


39

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

$ 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

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

Ответы:


34

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

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

Докер запустить Centos / bin / sh -c 'CD / bin; / bin / ls 'ничего не печатает, в то время как docker запускает centos / bin / sh -c' / bin / ls / bin 'работает.
seanmcl

На самом деле обе команды выводят список файлов в каталоге / bin. Пробовал оба.
глюон

Не на моей коробке, centos7.
seanmcl

1
На самом деле, даже простое удаление кавычек вокруг моей команды работало нормально. Я думаю, что докер оборачивает это в/bin/sh -c любом случае.
Schmmd

85

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

docker run

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

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

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

Могу ли я использовать -wс docker exec? Я ищу способ запустить скрипт Python в моем контейнере, но не могу остановить его вне контейнера.
zx1986

о, я получил ответ ....flag provided but not defined: -w
zx1986

1
Черт возьми, почему это скрывается полностью внизу справочной страницы запуска докера ! :-)
Амир Абири

5
Это должен быть принятый ответ
Fferri

4

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


0

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

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

$ export PATH=$PATH:
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.