Перезапуск контейнера пропущен / выполняется до тех пор, пока я не запустил bash

У меня странная ошибка в пользовательском образе докера. Хост-система - centos 7. 4 с помощью Docker 17.12.0-ce, в то время как образ основан на centos 7.2 с apache и имеет собственное приложение, работающее на cgi. Когда создается новый контейнер, он работает нормально, но при перезапуске контейнера (либо с помощью флага restart = always, либо вручную) он продолжает перезапускать bin apache в конце сценария, запущенного CMD.

журналы apache (которые находятся в томе), они показывают эти строки при каждом перезапуске apache:

[auth_digest:error] [pid 19] (17)File exists: AH01762: Failed to create shared memory segment on file /run/httpd/authdigest_shm.19
[auth_digest:error] [pid 19] (17)File exists: AH01760: failed to initialize shm - all nonce-count checking, one-time nonces, and MD5-sess algorithm disabled
[:emerg] [pid 19] AH00020: Configuration Failed, exiting

Погуглите коды ошибок, это похоже на проблему с папкой / run / httpd, поэтому я решил запустить терминал bash, чтобы проверить, есть ли возникнут какие-либо проблемы, и в тот самый момент, когда я врезаюсь в контейнер, ошибки прекращаются, я получаю следующие строки:

[auth_digest:notice] [pid 34] AH01757: generating secret for digest authentication ...
[lbmethod_heartbeat:notice] [pid 34] AH02282: No slotmem from mod_heartmonitor
[core:warn] [pid 34] AH00098: pid file /run/httpd/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[mpm_prefork:notice] [pid 34] AH00163: Apache/2.4.6 (CentOS) mod_perl/2.0.10 Perl/v5.16.3 configured -- resuming normal operations
[core:notice] [pid 34] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'

и apache начинает отвечать, поскольку ничего не произошло.

Я тестировал это поведение несколько раз, это не так. зависящие от времени (это может быть 5 минут или 1 час с сообщениями об ошибках, они прекратятся, как только я войду в систему).

Итак, у меня следующие вопросы:

  1. Какой триггер при входе в bash может решить проблему?
  2. Как я могу воспроизвести его в сценарии, запущенном CMD?

С уважением.

PS: извините, если об этом уже спрашивали раньше, мне было очень трудно найти проблему с докером и "/ run", поскольку Google игнорирует косую черту.

1
задан 5 January 2018 в 11:34
1 ответ

Итак, методом проб и ошибок я нашел способ решить эту проблему, но я совершенно не понимаю, почему это происходит.

Я добавил в начале сценарий, запускаемый CMD, инструкция по удалению содержимого / run / httpd:

1 #!/bin/bash
2
3 rm -rf /run/httpd/*
4
5 [... continue execution as before ...]

Кажется, у этой меры нет недостатков, поэтому я буду ее придерживаться.

Я все равно буду более чем счастлив, если кто-нибудь может объяснить это поведение.

С уважением

0
ответ дан 4 December 2019 в 04:16

Теги

Похожие вопросы