为了让容器在启动点自动启动,我尝试添加命令:在/etc/rc. local文件中创建一个文件名为cd directory_has_docker-compose.yml && docker-compose up -d。但当我重启机器后,容器就不工作了。如何在系统启动时运行docker-compose up -d?
cd directory_has_docker-compose.yml && docker-compose up -d
docker-compose up -d
ep6jt1vc1#
restart: unless-stopped
docker-compose.yml
rdrgkggo2#
要使用重新启动策略,Docker提供以下选项:否:容器不会自动重新启动。失败时[:最大重试次数]:如果退出时退出代码为非零,则重新启动容器,并为Docker守护进程重新启动容器提供最大尝试次数。always:如果容器停止,则始终重新启动。未停止:始终重新启动container,除非它被任意停止或被Docker守护进程停止。
a8jjtwal3#
当我们使用crontab或过时的/etc/rc.local文件时,我们需要一个延迟(例如sleep 10,取决于机器)来确保系统服务可用。通常,systemd(或upstart)用于管理系统引导时启动哪些服务。您可以尝试使用类似的配置:
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标志的情况下运行:
-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
使用停靠的项目路径更改WorkingDirectory参数,并使服务自动启动:
WorkingDirectory
systemctl enable docker-compose-app
qnyhuwrf4#
您应该能够添加:
restart: always
到docker-compose.yml文件中要重新启动的每个服务。参见:https://github.com/compose-spec/compose-spec/blob/master/spec.md#restart
hfwmuf9z5#
如果docker.service在系统启动时启用
docker.service
$ sudo systemctl enable docker
并且docker-compose.yml中的服务具有
如果只运行以下命令一次,则在重新启动系统时所有服务都会运行
j2qf4p5b6#
使用重新启动:在docker-compose.yaml文件中始终使用。Docker-compose up -d将再次从映像启动容器。使用docker-compose start启动已停止的容器,它不会从映像启动新容器。
docker-compose.yaml
Docker-compose up -d
docker-compose start
nginx: restart: always image: nginx ports: - "80:80" - "443:443" links: - other_container:other_container
您也可以在docker文件中编写代码,这样如果它与其他容器有依赖关系,就可以首先创建它。
brc7rcf07#
我试过restart: always,它可以在一些容器(如php-fpm)上工作,但我遇到了一些容器(如nginx)在重新启动后仍然无法重新启动的问题。解决了问题。
crontab -e @reboot (sleep 30s ; cd directory_has_dockercomposeyml ; /usr/local/bin/docker-compose up -d )&
a5g8bdjr8#
作为user39544答案的补充,crontab -e还有一种语法:
user39544
crontab -e
@reboot sleep 60 && /usr/local/bin/docker-compose -f /path_to_your_project/docker-compose.yml up -d
8条答案
按热度按时间ep6jt1vc1#
docker-compose.yml
rdrgkggo2#
要使用重新启动策略,Docker提供以下选项:
否:容器不会自动重新启动。
失败时[:最大重试次数]:如果退出时退出代码为非零,则重新启动容器,并为Docker守护进程重新启动容器提供最大尝试次数。
always:如果容器停止,则始终重新启动。
未停止:始终重新启动container,除非它被任意停止或被Docker守护进程停止。
a8jjtwal3#
当我们使用
crontab
或过时的/etc/rc.local
文件时,我们需要一个延迟(例如sleep 10
,取决于机器)来确保系统服务可用。通常,systemd
(或upstart
)用于管理系统引导时启动哪些服务。您可以尝试使用类似的配置:或者,如果要在不使用
-d
标志的情况下运行:使用停靠的项目路径更改
WorkingDirectory
参数,并使服务自动启动:qnyhuwrf4#
您应该能够添加:
到
docker-compose.yml
文件中要重新启动的每个服务。参见:https://github.com/compose-spec/compose-spec/blob/master/spec.md#restart
hfwmuf9z5#
如果
docker.service
在系统启动时启用并且
docker-compose.yml
中的服务具有如果只运行以下命令一次,则在重新启动系统时所有服务都会运行
j2qf4p5b6#
使用重新启动:在
docker-compose.yaml
文件中始终使用。Docker-compose up -d
将再次从映像启动容器。使用docker-compose start
启动已停止的容器,它不会从映像启动新容器。您也可以在docker文件中编写代码,这样如果它与其他容器有依赖关系,就可以首先创建它。
brc7rcf07#
我试过
restart: always
,它可以在一些容器(如php-fpm)上工作,但我遇到了一些容器(如nginx)在重新启动后仍然无法重新启动的问题。解决了问题。
a5g8bdjr8#
作为
user39544
答案的补充,crontab -e
还有一种语法: