как ждать завершения "docker exec", прежде чем продолжить в сценарии оболочки - PullRequest
0 голосов
/ 03 июля 2019

У меня есть команда docker exec, и я хочу дождаться ее завершения, прежде чем продолжить оставшуюся часть сценария оболочки, как мне это сделать?

#!/bin/bash
docker exec -it debian sleep 10;

wait
echo done

Обновление: не следует использовать опцию -it

#!/bin/bash
docker exec debian sleep 10;

wait
echo done

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Команда docker exec будет ожидать завершения по умолчанию.Возможные причины возврата docker exec до завершения выполнения команды, о которой я могу подумать:

  1. Вы явно указали docker exec запускаться в фоновом режиме с флагом отсоединения,aka -d.
  2. Команда, которую вы выполняете внутри контейнера, возвращается до завершения выполняемого им процесса, например, запуска фонового демона.В этом случае вам нужно настроить команду, которую вы выполняете.

Вот несколько примеров:

$ # launch a container to test:
$ docker run -d --rm --name test-exec busybox tail -f /dev/null
a218f90f941698960ee5a9750b552dad10359d91ea137868b50b4f762c293bc3

$ # test a sleep command, works as expected
$ time docker exec -it test-exec sleep 10

real    0m10.356s
user    0m0.044s
sys     0m0.040s

$ # test running without -it, still works
$ time docker exec test-exec sleep 10

real    0m10.292s
user    0m0.040s
sys     0m0.040s

$ # test running that command with -d, runs in the background as requested
$ time docker exec -itd test-exec sleep 10 

real    0m0.196s
user    0m0.056s
sys     0m0.024s

$ # run a command inside the container in the background using a shell and &
$ time docker exec -it test-exec /bin/sh -c 'sleep 10 &'

real    0m0.289s
user    0m0.048s
sys     0m0.044s
0 голосов
/ 03 июля 2019

Обновление: не следует использовать опцию -it.Это должно работать.

#!/bin/bash
docker exec debian sleep 10;

wait
echo done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...