У меня ванильная установка CoreOS (835.9.0), и она не запускает демон докеров при запуске. Он запускается только тогда, когда я использую SSH и делаю, например, docker ps
.
Как сделать так, чтобы демон docker запускался автоматически при загрузке системы?
Когда я говорю демон докеров, я имею в виду ps -ef | grep docker
не показывает никаких процессов, пока я не сделаю docker ps
sudo systemctl enable docker
сделали свое дело.
Сейчас это немного устарело, но я начал использовать 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
Пример варианта использования - обновить контейнер до последней версии после запуска службы, а расширенный пример также регистрирует службу в etcd. Прочтите Документация CoreOS для получения дополнительной справочной информации.
Я использую Docker Swarm, поэтому у меня нет специального приложения, за которое systemd отвечал бы ... Мне просто нужно, чтобы docker запускался при загрузке. Это решение, которое я разработал.
Положи это /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
команда обращается к демону докера, запускает сокет и запускает сам сервис докера.
Я попробовал systemctl enable docker
трюк в другом ответе, и хотя он сначала работал, он, похоже, вызвал какую-то грохочущую ситуацию со стадом, когда докер, по-видимому, пытался сделать много и с треском провалился. Я подозреваю, что это поведение «блокирования загрузочной цепочки», упомянутое в комментариях.