2017-02-20 7 views
1

Вы можете выполнить Баш оболочку в Докер контейнере с помощьюВыполнения Баша затем выполнение команд в докер

sudo docker exec -it container bash 

Но я хочу команду, которая выполняет Баш оболочку в контейнере, а затем выполняет несколько команд в Баше незамедлительный.

команда, как это в настоящее время работает:

sudo docker exec -it container touch test.txt | bash 

Однако, команда, которую я хочу, чтобы запустить в Баш строке доступен только внутри контейнера Докер, так что я получаю сообщение об ошибке:

No such file or directory 

Возможно ли выполнить команду, которая является локальной для контейнера докера, используя docker exec?

+0

Команда 'bash' является' bash' контейнера. Если в вашем контейнере нет bash, это может действительно потерпеть неудачу (см. Изображение 'alpine'). Поэтому, если в вашем контейнере есть некоторая команда типа 'git', вы можете сделать' docker exec -it container git clone https: // somegit'. [docs] (https://docs.docker.com/engine/reference/commandline/exec/) – jrbeverly

+1

Какую команду вы пытаетесь запустить. Команда EVERY, выполняемая через docker exec, находится внутри контейнера. – user2105103

+0

По команде вы имеете в виду скрипт bash? Как вы хотите сделать bash myscript.sh'? Если это так, вам нужно знать рабочий каталог контейнера (который может быть установлен 'WORKDIR'). Вы можете найти его с помощью 'pwd', выполнив это в контейнере. – jrbeverly

ответ

0

попробовать что-то вроде этого:

sudo docker exec -it container bash -c "touch test.txt ; <another command>" 
+0

А? Вы пытаетесь * pipe * от 'touch' в другую команду? Это не имеет смысла - 'touch' не испускает ничего на stdout, поэтому нет ничего, чтобы трубить. –

+0

Возможно, вы хотите ';' вместо '|'? –

+0

уверен, исправлено, спасибо – Matthew

1

Я полагаю, я должен читал Docker документы больше!

docker exec -it container mycommand 

работает нормально! По какой-то причине я думал, что мне нужно инициировать подсказку bash, а затем использовать другие команды, мою ошибку.

Благодарим jrbeverly и user2105103 за разъяснение, что команда «EVERY», выполняемая через docker exec, находится внутри контейнера ».

В случае кому-то интересно, как запускать несколько команд в контейнере, я использую:

sudo docker exec -it container sh -c "com1 && com2 && com3" 
Смежные вопросы