为了让容器在启动点自动启动,我尝试添加命令:
cd directory_has_docker-compose。Yml && docker-compose up -d /etc/rc.local
但当我重启机器后,容器就不工作了。
如何在系统启动时运行docker-compose up -d ?
为了让容器在启动点自动启动,我尝试添加命令:
cd directory_has_docker-compose。Yml && docker-compose up -d /etc/rc.local
但当我重启机器后,容器就不工作了。
如何在系统启动时运行docker-compose up -d ?
当前回答
如果你是码头工人。系统启动时启用服务
$ sudo systemctl enable docker
还有你在码头的工作。yml已经
restart: always
如果只运行下面的命令一次,则重新引导系统时将运行所有服务
docker-compose up -d
其他回答
如果你是码头工人。系统启动时启用服务
$ sudo systemctl enable docker
还有你在码头的工作。yml已经
restart: always
如果只运行下面的命令一次,则重新引导系统时将运行所有服务
docker-compose up -d
为了使用重启策略,Docker提供了以下选项:
no:容器不自动重启。 on-failure[:max-retries]:如果容器退出,则重新启动 方法的最大尝试次数 Docker守护进程重新启动容器。 always:当容器停止时,总是重新启动容器。 unless-stopped:总是重新启动容器,除非它已经停止 或者由Docker守护进程。
作为对user39544的回答的补充,crontab -e的另一种语法类型:
@reboot sleep 60 && /usr/local/bin/docker-compose -f /path_to_your_project/docker-compose.yml up -d
当我们使用crontab或已弃用的/etc/rc.本地文件,我们需要一个延迟(例如,睡眠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
StartLimitIntervalSec=60
[Service]
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
Restart=on-failure
StartLimitBurst=3
[Install]
WantedBy=multi-user.target
使用dockerized项目路径更改WorkingDirectory参数。并使服务自动启动:
systemctl enable docker-compose-app
你应该能够添加:
restart: always
到你想在docker-compose中重新启动的每个服务。yml文件。
见:https://github.com/compose-spec/compose-spec/blob/master/spec.md重启