Демон Docker не запускается при загрузке в CoreOS

У меня установлена ​​обычная версия CoreOS (835.9.0), и она не запускает демон docker при запуске. Он запускается только тогда, когда я подключаюсь по SSH и выполняю, например, docker ps .

Как сделать так, чтобы демон docker запускался автоматически при загрузке системы?

Когда я говорю демон docker, я имею в виду ps -ef | grep docker не показывает никаких процессов, пока я не сделаю docker ps

23
задан 15 December 2015 в 09:56
4 ответа

sudo systemctl enable docker помогло.

40
ответ дан 28 November 2019 в 20:19

Это немного устарело, но я начал использовать cloud-init для этого на всех новых серверах. У меня есть сохраненный сценарий облачной инициализации, который я использую для всех своих серверов. Его часть содержит:

#cloud-config
coreos:
  units:
    - name: "docker.service"
      command: "start"
      enable: true

Это включит службу докеров и запустит ее при первой и каждой загрузке.

6
ответ дан 28 November 2019 в 20:19

Как уже объяснялось в этом комментарии Роба , докер активирован сокетом. Это означает, что деамон не запускается, пока не будет вызван. Существующие здесь ответы работают, но CoreOS рекомендует другой подход.

Рекомендуемый способ сделать это, согласно документации CoreOS , - создать службу для вашего собственного приложения, которое, в свою очередь, требует службы Docker. :

/etc/systemd/system/myapp.service:

[Unit]
Description=MyApp
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill busybox1
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --name busybox1 busybox /bin/sh -c "trap 'exit 0' INT TERM; while true; do echo Hello World; sleep 1; done"

[Install]
WantedBy=multi-user.target

И пусть эта служба запускается автоматически:

$ sudo systemctl enable /etc/systemd/system/myapp.service
$ sudo systemctl start hello.service

Пример варианта использования - обновить контейнер до последней версии после запуска службы и расширенного example также регистрирует службу в etcd. Дополнительную справочную информацию см. В документации CoreOS .

2
ответ дан 28 November 2019 в 20:19

Я использую Docker Swarm, поэтому у меня нет специального приложение для systemd, за которое будет отвечать ... Мне просто нужно, чтобы докер запускался при загрузке. Это решение, которое я разработал.

Поместите этот /etc/systemd/system/poke-docker.service :

[Unit]
After=default.target

[Service]
Type=oneshot
ExecStart=/usr/bin/docker version
RemainAfterExit=yes

[Install]
WantedBy=default.target

А затем просто systemctl enable poke-docker , чтобы настроить его для срабатывания при каждой загрузке ближе к концу последовательности запуска. Команда docker version общается с демоном docker, запускает сокет и запускает сам docker service.

Я попробовал трюк systemctl enable docker в другом ответе, и пока он сначала работало, похоже, это вызвало громовую ситуацию со стадом, в которой докер, очевидно, пытался сделать очень много и терпел неудачу. Я подозреваю, что это поведение «блокирования загрузочной цепочки» упоминается в комментариях.

1
ответ дан 28 November 2019 в 20:19

Теги

Похожие вопросы