Answers:
当使用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
使用您的dockerized项目路径更改参数。并启用该服务以自动启动:
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
有一些严重的错误:例如,重新启动时不会挂载主机座。我认为,如果现有的车轮是方形的,则最好重新设计车轮。
我试过了restart: always
,它可以在某些容器(例如php-fpm)上工作,但是我遇到的问题是某些容器(例如nginx)在重新启动后仍无法重新启动。
解决了问题。
crontab -e
@reboot (sleep 30s ; cd directory_has_dockercomposeyml ; /usr/local/bin/docker-compose up -d )&
使用重启:始终在您的docker compose文件中。
Docker-compose up -d
将再次从图像启动容器。使用docker-compose start
启动停止容器,它永远不会启动从图像中新的容器。
nginx:
restart: always
image: nginx
ports:
- "80:80"
- "443:443" links:
- other_container:other_container
您也可以将代码写在docker文件中,以便在具有其他容器依赖性的情况下首先创建代码。
--restart always
or--restart unless-stopped
或restart: always
-> Ref。但是也许不能在某些容器上工作!