Docker --rm не очищает при запуске фонового процесса - PullRequest
0 голосов
/ 04 марта 2019

Не делая заголовок слишком длинным, вот сценарий ...

У меня есть два сценария:

  1. Первый сценарий (host_startup.sh) проверяет, является лисайт работает.Когда он наконец публикует сообщения, он открывает веб-сайт в браузере по умолчанию:

    URL=http://localhost:9876
    until contents=$(wget -q --spider --no-check-certificate "$URL")
    do
      sleep 1
    done
    xdg-open ${URL} &
    
  2. Второй скрипт (run.sh) запускает скрипт host_startup, а затем запускает DockerКонтейнер, который обслуживает веб-страницу по указанному выше адресу:

    (../../host_startup.sh) &
    docker run --rm -it \
        -p 9786:9786 \
        company:image
    

Обратите внимание, что команда docker запускается с флагом --rm.Однако, когда я запускаю сценарий run.sh и нажимаю Ctrl + C процесс, образ Docker все еще работает ... В частности, docker ps показывает контейнер по-прежнему.

Я бы хотел, чтобы Ctrl + C остановил контейнер и очистил его.

Я думал, что контейнер остановится и очистится, потому что я поставил сценарий host_startup.sh в фоновом режиме, а НЕ команду docker run ...

Пожалуйста, скажите мне, как я могу достичьжелаемое поведение.

1 Ответ

0 голосов
/ 04 марта 2019

Кажется, что «Bash не передает сигналы, подобные SIGTERM, процессам, которые он в данный момент ожидает».

Таким образом, вы можете изменить свой run.sh на:

(../../host_startup.sh) &
exec docker run --rm -it \
    -p 9786:9786 \
    company:image

Что заменитразветвление оболочки с процессом докера вместо ожидания.

Основано на ответе Суарта П. Бентли на стеке unix exchangeexchange

В качестве альтернативы вы можете прослушивать и вручнуюдействовать на сигналы, используя модифицированную версию ответа cuonglm на тот же вопрос.

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