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
Другие вопросы по тегам