У меня странная ошибка в пользовательском образе докера. Хост-система - это 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 час с сообщениями об ошибках, они прекратятся, как только я войду в систему).
Итак, мои вопросы:
С уважением.
PS: извините, если об этом спрашивали раньше, мне было очень сложно найти проблему с докером и "/ run", поскольку Google игнорирует косую черту.
Итак, методом проб и ошибок я нашел способ решить эту проблему, но я совершенно не понимаю, почему это происходит.
Я добавил в начале сценария, запускаемого CMD, инструкцию по удалению содержимого / run / httpd:
1 #!/bin/bash
2
3 rm -rf /run/httpd/*
4
5 [... continue execution as before ...]
Кажется, что у этой меры нет недостатка, поэтому я буду ее придерживаться.
Я по-прежнему буду более чем счастлив, если кто-нибудь сможет объяснить такое поведение.
С уважением