У меня установлена обычная версия CoreOS (835.9.0), и она не запускает демон docker при запуске. Он запускается только тогда, когда я подключаюсь по SSH и выполняю, например, docker ps
.
Как сделать так, чтобы демон docker запускался автоматически при загрузке системы?
Когда я говорю демон docker, я имею в виду ps -ef | grep docker
не показывает никаких процессов, пока я не сделаю docker ps
Это немного устарело, но я начал использовать cloud-init для этого на всех новых серверах. У меня есть сохраненный сценарий облачной инициализации, который я использую для всех своих серверов. Его часть содержит:
#cloud-config
coreos:
units:
- name: "docker.service"
command: "start"
enable: true
Это включит службу докеров и запустит ее при первой и каждой загрузке.
Как уже объяснялось в этом комментарии Роба , докер активирован сокетом. Это означает, что деамон не запускается, пока не будет вызван. Существующие здесь ответы работают, но 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 .
Я использую 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
в другом ответе, и пока он сначала работало, похоже, это вызвало громовую ситуацию со стадом, в которой докер, очевидно, пытался сделать очень много и терпел неудачу. Я подозреваю, что это поведение «блокирования загрузочной цепочки» упоминается в комментариях.