Тайна перезапускающегося Docker-контейнера

Я заметил закономерность, которую легко воспроизвести, но я не могу ответить, почему в течение моей жизни это происходит. По какой-то причине, если я использую команду docker-compose kill (чтобы убить все контейнеры), а затем снова запустите его с docker-compose -d мой веб-контейнер застрял в бесконечном цикле перезапуска. Я искал ответы на все вопросы в интернете и ничего не смог найти.

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

введите описание изображения здесь

Пожалуйста, обратитесь к этому посту, который я сделал (Docker-Compose не будет увеличивать объем моего файла php.ini) для моей полной настройки докера, которая используется здесь точно таким же образом, но я приложу свой файл docker-compose здесь для быстрого ознакомления.

докер-compose.yml

version: '2'
services:
dblive:
image: mysql:5.5.52
volumes:
- ./db_data_live:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: ****
MYSQL_DATABASE: ****
MYSQL_USER: ****
MYSQL_PASSWORD: ****

dbdev:
image: mysql:5.5.52
volumes:
- ./db_data_dev:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD:****
MYSQL_DATABASE: ****
MYSQL_USER: ****
MYSQL_PASSWORD: ****

phpmyadmin:
depends_on:
- dblive
- dbdev
image: phpmyadmin/phpmyadmin
environment:
PMA_ARBITRARY : 1
restart: always
ports:
- "8081:80"
web:
build: ./
depends_on:
- dblive
- dbdev
volumes:
- ./web:/var/www
- ./config/custom.php.ini:/etc/php5/apache2/conf.d/custom.php.ini
- ./logs/apache_error.log:/var/log/apache2/error.log
- ./logs/apache_access.log:/var/log/apache2/access.log
- ./config/apache_default.conf:/etc/apache2/sites-enabled/000-default.conf
restart: always
ports:
- "80:80"- "443:443"

Действия по воспроизведению

  1. См. Мой связанный пост Вот чтобы получить мою полную настройку, чтобы следовать.
  2. Бежать docker-compose up -d. Это запустит контейнеры.
  3. Бежать докер PS чтобы убедиться, что они все в порядке и были в течение 15 секунд
    или больше.
  4. Бежать docker-compose kill остановить контейнеры.
    Бежать docker-compose up -d снова запустить контейнеры и следите за докером ps каждые 5 секунд, чтобы заметить последовательный перезапуск веб-контейнера. Не стесняйтесь убивать и перезапускать много раз, и перезапуск будет продолжаться.
  5. Интересно, что закомментируйте строку в docker-compose.yml
    файл. В моем случае я закомментировал объем файла php.ini
    как это, #-
    ./config/custom.php.ini:/etc/php5/apache2/conf.d/custom.php.ini
  6. Бежать docker-compose kill чтобы остановить контейнеры снова. Тогда беги docker-compose up -d а также на этот раз контейнер будет волшебным образом работать без перезагрузки ??

Мой вопрос: почему небольшое изменение файла docker-compose.yml и его запуск приводят к тому, что он теперь работает? Если я убью контейнер по какой-либо причине после этого и попытаюсь запустить снова без внесения изменений в docker-compose.yml файл затем цикл перезапуска происходит в веб-контейнере. Почему он это делает?

Ниже приведено изображение, показывающее, как оно работает после предыдущего перезапуска с первого прикрепленного изображения. На изображении, пожалуйста, игнорируйте и извините ERROR: yaml.scanner.ScannerError: Я забыл, что у меня есть пароли к MySQL от XX, поэтому убедитесь, что вы просто добавили что-то туда, чтобы сделать это счастливым. Содержание после ошибки показывает, что она снова начинает работать снова.

введите описание изображения здесь

1

Решение

Ответ не использовать run docker-compose kill, а использовать докер-сочинять вместо этого, потому что docker-compose kill только убивает контейнеры, но не очищает кеш, который делает docker-compose для вас.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]