Ответы:
Когда мы используем crontab
или устаревший /etc/rc.local
файл, нам нужна задержка (например sleep 10
, в зависимости от машины), чтобы убедиться, что системные службы доступны. Обычно systemd
(или upstart
) используется для управления запуском служб при загрузке системы. Вы можете попробовать использовать для этого аналогичную конфигурацию:
# /etc/systemd/system/docker-compose-app.service
[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
Или, если вы хотите запустить без -d
флага:
# /etc/systemd/system/docker-compose-app.service
[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service
[Service]
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
Restart=on-failure
StartLimitIntervalSec=60
StartLimitBurst=3
[Install]
WantedBy=multi-user.target
Измените WorkingDirectory
параметр, указав путь к документированному проекту. И включите автоматический запуск службы:
systemctl enable docker-compose-app
systemctl start docker-compose-app
и systemctl status docker-compose-app
я думаю, это то, что вы ищете.
systemctl start docker-compose-app
столкнулся с этим:Job for docker-compose-app.service failed because the control process exited with error code. See "systemctl status docker-compose-app.service" and "journalctl -xe" for details
service docker-compose-app start
статус с service docker-compose-app status
, остановка сservice docker-compose-app stop
Вы должны иметь возможность добавить:
restart: always
для каждой службы, которую вы хотите перезапустить, в файле docker-compose.yml
restart: always
есть несколько серьезных ошибок: например, при перезагрузке не будут прикреплены крепления хоста. На мой взгляд, велосипед лучше изобретать, если имеющееся колесо квадратное.
Если ваш docker.service
включен при запуске системы
$ sudo systemctl enable docker
и ваши услуги в вашем docker-compose.yml
есть
restart: always
все службы запускаются при перезагрузке системы, если вы запустите команду ниже только один раз
docker-compose up -d
Я пробовал restart: always
, он работает в некоторых контейнерах (например, php-fpm), но я столкнулся с проблемой, что некоторые контейнеры (например, nginx) все еще не перезагружаются после перезагрузки.
Решил проблему.
crontab -e
@reboot (sleep 30s ; cd directory_has_dockercomposeyml ; /usr/local/bin/docker-compose up -d )&
Используйте перезапуск: всегда в вашем файле компоновки докеров.
Docker-compose up -d
снова запустит контейнер из образов. Используется docker-compose start
для запуска остановленных контейнеров, никогда не запускает новые контейнеры из образов.
nginx:
restart: always
image: nginx
ports:
- "80:80"
- "443:443" links:
- other_container:other_container
Также вы можете написать код в файле докеров, чтобы он создавался первым, если он зависит от других контейнеров.
always
, но возможно unless-stopped
. Другие варианты - on-failure
и no
. Это известно как политика перезапуска .
В дополнение к user39544
ответу еще один тип синтаксиса для crontab -e
:
@reboot sleep 60 && /usr/local/bin/docker-compose -f /path_to_your_project/docker-compose.yml up -d
crontab -e
как пользователь pi, а pi был членом группы docker ...
--restart always
или--restart unless-stopped
или в docker-compose.yml используйтеrestart: always
-> Ссылка . Но, возможно, не сработало на некоторых контейнерах!