Я хочу запустить etcd (один узел) в докере из systemd, но, похоже, что-то пошло не так — он завершается примерно через 30 секунд после запуска.
Похоже, служба запускается в статусе "активация" но завершается примерно через 30 секунд, не достигая статуса "активный". Возможно, между контейнером докеров и systemd отсутствует какая-либо сигнализация?
Обновлять (см. внизу поста): статус службы systemd достигает не удалось (Результат: тайм-аут)
- когда я удаляю Перезапуск = при сбое
инструкция.
Когда я проверяю состояние службы etcd после загрузки, я получаю такой результат:
$ sudo systemctl status etcdâ etcd.service - etcd Loaded: загружен (/etc/systemd/system/etcd.service; включен; предустановка поставщика: отключена)
Активно: активация (автоматический перезапуск) (Результат: код выхода) со среды 18.08.2021 20:13:30 UTC; 4 с назад
Процесс: 2971 ExecStart=/usr/bin/docker run -p 2380:2380 -p 2379:2379 --volume=etcd-data:/etcd-data --name etcd my-aws-account.dkr.ecr.eu- north-1.amazonaws.com/etcd:v3.5.0 /usr/local/bin/etcd --data-dir=/etcd-data --name etcd0 --advertise-client-urls http://10.0.0.11: 2379 --listen-client-urls http://0.0.0.0:2379 --initial-advertise-peer-urls http://10.0.0.11:2380 --listen-peer-urls http://0.0.0.0: 2380 --initial-cluster etcd0=http://10.0.0.11:2380 (код=выход, статус=125)
Основной PID: 2971 (код=выход, статус=125)
Я запускаю это на машине Amazon Linux 2 со сценарием пользовательских данных, который запускается при запуске. Я подтвердил, что докер.сервис
и docker_ecr_login.service
запустить успешно.
И вскоре после запуска машины я вижу, что etcd работает:
sudo systemctl статус etcd
etcd.service - etcd
Загружено: загружено (/etc/systemd/system/etcd.service; включено; настройка поставщика: отключена)
Активно: активация (начало) с 18 августа 2021 г. 20:30:07 UTC; 1 мин 20 с назад
Основной PID: 1573 (докер)
Заданий: 9
Память: 24,3 Мб
Группа CG: /system.slice/etcd.service
ââ1573 /usr/bin/docker run -p 2380:2380 -p 2379:2379 --volume=etcd-data:/etcd-data --name etcd my-aws-account.dkr.ecr. eu-север-1.amazonaws.com...
18 августа, 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.690Z","регистратор":"плот","звонящий":"...rm 2"}
18 августа, 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.691Z","вызывающий":"etcdserver/serve..."3.5"}
18 августа, 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.693Z","вызывающий":"членство/группа..."3.5"}
18 августа, 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.693Z","вызывающий":"etcdserver/server.go:2...
18 августа, 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.693Z","вызывающий":"api/capability.g..."3.5"}
18 августа, 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.693Z","вызывающий":"etcdserver/serve..."3.5"}
18 августа, 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.693Z","вызывающий":"embed/serve.go:9...ests"}
18 августа, 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.695Z","вызывающий":"etcdmain/main.go...emon"}
18 августа, 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.695Z","вызывающий":"etcdmain/main.go...emon"}
18 августа, 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.702Z","вызывающий":"embed/serve.go:1...2379"}
Подсказка: некоторые строки были выделены эллипсами, используйте -l, чтобы показать их полностью.
Я получаю такое же поведение, когда etcd слушает IP-адрес узла (10.0.0.11) или 127.0.0.1.
Я могу запустить etcd локально из командной строки (и он не прекращается через 30 секунд), с:
sudo docker run -p 2380:2380 -p 2379:2379 --volume=etcd-data:/etcd-data --name etcd-local \
my-aws-account.dkr.ecr.eu-north-1.amazonaws.com/etcd:v3.5.0 \
/usr/local/bin/etcd --data-dir=/etcd-данные \
--имя etcd0 \
--advertise-client-urls http://127.0.0.1:2379 \
--listen-client-urls http://0.0.0.0:2379 \
--initial-advertise-peer-urls http://127.0.0.1:2380 \
--listen-peer-urls http://0.0.0.0:2380 \
--initial-cluster etcd0=http://127.0.0.1:2380
Параметры etcd аналогичны Запуск одного узла etcd — документация по ectd 3.5.
Это важная часть сценария запуска, которая предназначена для запуска etcd:
том sudo docker создать --name etcd-данные
кошка <<ЕОФ | sudo тройник /etc/systemd/system/etcd.service
[Ед. изм]
Описание=и т.д.
После=docker_ecr_login.service
[Оказание услуг]
Тип=уведомить
ExecStart=/usr/bin/docker run -p 2380:2380 -p 2379:2379 --volume=etcd-data:/etcd-data \
--name etcd my-aws-account.dkr.ecr.eu-north-1.amazonaws.com/etcd:v3.5.0 \
/usr/local/bin/etcd --data-dir=/etcd-данные \
--имя etcd0 \
--advertise-client-urls http://10.0.0.11:2379 \
--listen-client-urls http://0.0.0.0:2379 \
--initial-advertise-peer-urls http://10.0.0.11:2380 \
--listen-peer-urls http://0.0.0.0:2380 \
--initial-cluster etcd0=http://10.0.0.11:2380
Перезапуск = при сбое
Рестартсек=5
[Установить]
WantedBy=многопользовательская.цель
EOF
sudo systemctl включить etcd
sudo systemctl запустить etcd
При перечислении всех контейнеров на машине я вижу, что она запущена:
судо докер пс -а
ИДЕНТИФИКАТОР КОНТЕЙНЕРА ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНА СТАТУС ИМЕНА ПОРТОВ
a744aed0beb1 my-aws-account.dkr.ecr.eu-north-1.amazonaws.com/etcd:v3.5.0 "/usr/local/bin/etcd…" 25 минут назад Вышел (0) 24 минуты назад etcd
но я подозреваю, что его нельзя перезапустить, так как имя контейнера уже существует.
Почему контейнер etcd завершается через ~ 30 секунд при запуске из systemd? Похоже, что он успешно запущен, но systemd показывает его только в статусе «активация», но никогда не в статусе «активен», и кажется, что он завершается примерно через 30 секунд.Отсутствует ли какая-то сигнализация из док-контейнера etcd в systemd? Если да, то как мне правильно настроить эту сигнализацию?
ОБНОВИТЬ:
После удаления Перезапуск = при сбое
инструкции в файле сервисного модуля, теперь я получаю статус: не удалось (Результат: тайм-аут):
$ sudo systemctl статус etcd
etcd.service - etcd
Загружено: загружено (/etc/systemd/system/etcd.service; включено; настройка поставщика: отключена)
Активно: не удалось (Результат: тайм-аут) со среды 18 августа 2021 г., 21:35:54 UTC; 5 минут назад
Процесс: 1567 ExecStart=/usr/bin/docker run -p 2380:2380 -p 2379:2379 --volume=etcd-data:/etcd-data --name etcd my-aws-account.dkr.ecr.eu- north-1.amazonaws.com/etcd:v3.5.0 /usr/local/bin/etcd --data-dir=/etcd-data --name etcd0 --advertise-client-urls http://127.0.0.1: 2379 --listen-client-urls http://0.0.0.0:2379 --initial-advertise-peer-urls http://127.0.0.1:2380 --listen-peer-urls http://0.0.0.0: 2380 --initial-cluster etcd0=http://127.0.0.1:2380 (код=выход, статус=0/УСПЕХ)
Основной PID: 1567 (код=выход, статус=0/УСПЕХ)
18 августа, 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal docker[1567]: {"level":"info","ts":"2021-08-18T21 :35:54.332Z","вызывающий":"утил/прервал... ат"}
18 августа, 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal docker[1567]: {"level":"info","ts":"2021-08-18T21 :35:54.333Z","вызывающий":"вставить/etcd.go:36...379"]}
18 августа 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal docker[1567]: ПРЕДУПРЕЖДЕНИЕ: 2021/08/18 21:35:54 [ядро] grpc: addrConn. createTransport не удалось ...ing...
18 августа, 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal docker[1567]: {"level":"info","ts":"2021-08-18T21 :35:54.335Z","вызывающий":"etcdserver/serve...6a6c"}
18 августа, 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal docker[1567]: {"level":"info","ts":"2021-08-18T21 :35:54.337Z","вызывающий":"embed/etcd.go:56...2380"}
18 августа, 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal docker[1567]: {"level":"info","ts":"2021-08-18T21 :35:54.338Z","вызывающий":"embed/etcd.go:56...2380"}
18 августа, 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal docker[1567]: {"level":"info","ts":"2021-08-18T21 :35:54.339Z","вызывающий":"вставить/etcd.go:36...379"]}
18 августа, 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal systemd[1]: не удалось запустить etcd.
18 августа, 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal systemd[1]: устройство etcd.service перешло в состояние сбоя.
18 августа, 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal systemd[1]: ошибка etcd.service.
Подсказка: некоторые строки были выделены эллипсами, используйте -l, чтобы показать их полностью.