docker.socket: сбой с результатом 'service-start-limit-hit' после защиты сокета демона докеров
Я выполнил шаги, приведенные в документации здесь, чтобы добавить безопасность tls для docker api. Сертификаты находятся в ~ /.docker /, а также в папках / etc / docker / ssl /. Я добавил override.conf в /etc/systemd/system/docker.service.d/ с содержимым
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem
Затем я использовал daemon-reload и docker start
$ systemctl daemon-reload
$ service docker start
Ошибки в journalctl -xe:
-- Unit docker.socket has finished starting up.
--
-- The start-up result is RESULT.
Jan 15 21:43:24 cynicalplyaground systemd[1]: docker.service: Start request repeated too quickly.
Jan 15 21:43:24 cynicalplyaground systemd[1]: docker.service: Failed with result 'exit-code'.
Jan 15 21:43:24 cynicalplyaground systemd[1]: Failed to start Docker Application Container Engine.
-- Subject: Unit docker.service has failed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- Unit docker.service has failed.
--
-- The result is RESULT.
Jan 15 21:43:24 cynicalplyaground systemd[1]: docker.socket: Failed with result 'service-start-limit-hit'.
Jan 15 21:45:01 cynicalplyaground CRON[12768]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 15 21:45:01 cynicalplyaground CRON[12769]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Jan 15 21:45:01 cynicalplyaground CRON[12768]: pam_unix(cron:session): session closed for user root
Как я могу разобраться в этом вопросе?
13 ответов
В данном случае такая же ошибка произошла после последнего обновления Manjaro (2020-01-20).
Пытался изменить службу докеров systemd, как рекомендовалось в других случаях, но я отменил эти изменения, и, наконец, это было решено с помощью:
- перезагрузка системы
(как рекомендовано здесь: https://www.reddit.com/r/archlinux/comments/7ya4ug/installing_docker_on_arch_linux/)
Разобраться в корне проблемы;
статус systemctl docker.service
имеет это: / usr / bin / dockerd -H fd:// --containerd= / run / containerd / containerd.sock
При попытке запустить эту команду он жалуется, что не может настроить демон Docker с помощью файла /etc/docker/daemon.json: EOF.
ls -l /etc/docker/daemon.json -rw-r - r-- 1 root root 0 30 июля, 10:32 /etc/docker/daemon.json
ОБРАТИТЕ ВНИМАНИЕ, что файл JSON пуст. Удалите это.
Для меня это было потому, что установщик докеров использует iptables для nat. К сожалению, Debian использует nftables. Вы можете преобразовать записи в nftables или просто настроить Debian на использование устаревших iptables.
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
dockerd, после перехода на iptables-legacy должен запуститься нормально.
У меня была аналогичная проблема с nixOS, установленной в файловой системе btrfs.
Для меня решением было добавитьvirtualisation.docker.storageDriver = "btrfs";
к моему/etc/nixos/configuration.nix
Что, согласно документам докера, должно равняться добавлению следующего в/etc/docker/daemon.json
в большинстве других дистрибутивов:
{
"storage-driver": "btrfs"
}
У меня была такая же проблема на CentOS 7 после обновления устаревшей версии.docker
пакет вdocker-ce
. Оказалось, что мостdocker0
оставил включенным в конфигурации брандмауэра после удаления старого пакета и неудачного запуска службы Docker при попытке включить уже включенный интерфейс.
sudo firewall-cmd --zone trusted --remove-interface docker0
решил проблему.
Я столкнулся с аналогичной проблемой в Ubuntu, потому что добавил параметр в файл. Это нормально, но для систем, использующихsystemd
это может привести к конфликту с аргументами, переданными при запуске.
Решением было удалить/etc/docker/daemon.json
хhosts
запись и установите эту конфигурацию в файл/etc/systemd/system/docker.service.d/options.conf
.
$ cat /etc/systemd/system/docker.service.d/options.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://
После этого перезапустите службу.
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
Вы можете проверить, что ваши изменения были применены, запустивdocker info
. Кроме того, вы можете заметить в статусе службы докеров, чтоDrop-In
поле используетoptions.conf
создан, иdockerd
был выполнен с указанным списком хостов.
$ systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset>
Drop-In: /etc/systemd/system/docker.service.d
└─options.conf
Active: active (running) since Fri 2022-11-18 01:02:18 EST; 1h 50min ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 1111 (dockerd)
Tasks: 18
Memory: 58.5M
CPU: 1.294s
CGroup: /system.slice/docker.service
└─1111 /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://
Использованная литература:
У меня такая же проблема, и я просто изменил "/usr/bin/dockerd" на "/usr/sbin/dockerd", и тогда все заработало. Сначала вы можете проверить путь к dockerd.
Были проблемы с запуском службы докеров после установки. Последовал совету @DDKV587. Не сработало.
Рабочее решение предоставлено @fred727. Я использую Debian и настроил его для работы с таблицами IP вместо таблиц NF для NAT. Проблема сохранялась и была устранена путем очистки, переустановки docker.io и перемещения «/ usr / sbin / dockerd» обратно в «/ usr / bin / dockerd».
в моем случае ... хост был частью роя докеров ... но IPv6 больше не был доступен или автоматически назначался хосту ... Я вручную добавляю old_IPv6
ip -6 address add 28xx:xxxx:x:x:xx:ebff:fe14:xxx dev ens3x
в journalctl -u docker.service упоминается:
level=fatal msg="Error starting cluster component: could not find local IP address: dial udp [2xxx:xxx:xxxx:xxx]:2377: connect: network is unreachable"
после добавления IPv6 вручную я смог запустить докер, поэтому с запущенным докером я выхожу из «роя» и перезагружаюсь
docker swarm leave --force
после перезагрузки службы докеров работают в обычном режиме
Для меня не хватало места на диске. Перезагрузка тоже помогла, но я так и не смог собрать ни один контейнер.
После удаления некоторых устаревших материалов из томов докеров я смог продолжить.
Я получил эту ошибку, когда попытался переместить корневой каталог докера, и это привело меня к этой теме. Если вы следовали руководству по перемещению базового каталога Docker, который обычно находится по адресу/var/lib/docker
куда-нибудь еще, например<new_path>/docker
, вы также могли столкнуться с этой проблемой. Причина в том, что некоторые руководства, подобные тому, на которое я ссылался, используют более старую версию докера, в которой используется-g
сокращение для указания нового пути, но в более поздних версиях этот флаг не существует, и вам придется использовать--data-root
вместо. Итак, если вы изменили корень данных в файле/lib/systemd/system/docker.service
к:
ExecStart=/usr/bin/dockerd -g <new_path>/docker -H fd:// --containerd=/run/containerd/containerd.sock
На самом деле это должно быть:
ExecStart=/usr/bin/dockerd --data-root <new_path>/docker -H fd:// --containerd=/run/containerd/containerd.sock
У меня была аналогичная проблема, и я попробовалrebooting
как указано выше, а также изменив, чтобы удалить-H fd://
тоже аргумент.
Однако я продолжал получать следующее:
sudo systemctl status docker.socket
● docker.socket - Docker Socket for the API
Loaded: loaded (/lib/systemd/system/docker.socket; enabled; vendor preset:>
Active: failed (Result: service-start-limit-hit) since Sun 2023-03-26 20:3>
Triggers: ● docker.service
Listen: /run/docker.sock (Stream)
Mar 26 20:38:58 kourt systemd[1]: Starting Docker Socket for the API.
Mar 26 20:38:58 kourt systemd[1]: Listening on Docker Socket for the API.
Mar 26 20:39:07 kourt systemd[1]: docker.socket: Failed with result 'service-st>
При ближайшем рассмотрении видно, что сокет прослушивает/run/docker.sock
но побудил меня заглянуть/var/run
. Там (из-за предыдущей версии) у меня была папка под названием/var/run/docker/plugins
.
Удаление/var/run/docker
позволилdocker.socket
сервис для запуска и включенияdocker.service
начать.
БегUbuntu 20.04.6 LTS
.
Мне удалось решить проблему, отключив firewalld
systemctl disable firewalld
systemctl stop firewalld