Loading... # 方式1 在 `Docker Compose` 中设置开机自启动可以通过创建一个 systemd 服务,确保 Docker 容器在系统启动时自动运行。以下是一个示例步骤: ### 步骤 1: 编写 `docker-compose.yml` 文件 确保你的项目已经有一个 `docker-compose.yml`文件,这是`Docker Compose` 管理服务的定义文件。 ```sh version: '3' services: web: image: nginx:alpine ports: - "80:80" db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example ``` ### 步骤 2:创建一个 **systemd** 服务文件 1. 在 `/etc/systemd/system/` 目录下创建一个新的服务文件,例如:`docker-compose-app.service` ```sh sudo nano /etc/systemd/system/docker-compose-app.service ``` 2. 添加以下内容到该文件: ```yaml [Unit] Description=Docker Compose Application Service Requires=docker.service After=docker.service [Service] WorkingDirectory=/path/to/your/docker-compose/project ExecStart=/usr/local/bin/docker-compose up -d ExecStop=/usr/local/bin/docker-compose down Restart=always TimeoutStartSec=0 [Install] WantedBy=multi-user.target ``` 请确保 WorkingDirectory 指向你 `docker-compose.yml`文件所在的目录,并且 ExecStart 和 ExecStop 指定了正确的 `docker-compose` 可执行文件的路径(可以通过 `which docker-compose` 命令确认路径)。 步骤 3:设置服务开机自启 重新加载 `systemd`: ```sh sudo systemctl daemon-reload ``` 启用服务开机自启动: ```sh sudo systemctl enable docker-compose-app ``` 启动服务: ```sh sudo systemctl start docker-compose-app ``` 验证服务是否启动 使用以下命令检查服务的状态: ```sh sudo systemctl status docker-compose-app ``` 这样,当系统启动时,`Docker Compose` 定义的容器将自动启动并运行。 # 方法2 前言: 基于LNMP的开发工作中往往需要使用到一组容器,包括一些服务。这里的L为CentOS7/8(Tencent OS Server也可以),Nginx,PHP,Mysql,Redis。甚至还有使用gitlab容器等用来管理代码。根据个人的使用习惯,我一般会把这些容器的创建工作做成VM或实体开发机里的1个服务,让它们开机启动。走起,步骤如下: 提前编制好容器组。形成docker-compose.yml。本文为/home/docker/docker-compose.yml这个路径。docker-compose.yml编写需要读者另行学习。 编写docker.sh脚本供myContainers.service调用。本文为/home/docker/docker.sh这个路径;这个sh脚本代码如下: ```bash #!/bin/bash OPS=$1 OLD_IFS="$IFS" IFS="," OPSLIST=(${OPS:="restart"}) IFS="$OLD_IFS" DKCMPS="/usr/local/bin/docker-compose -f /home/docker/docker-compose.yml" for OP in ${OPSLIST[@]}; do case "$OP" in start) ${DKCMPS} start ;; stop) ${DKCMPS} stop ;; restart) ${DKCMPS} restart ;; up) ${DKCMPS} up -d --force-recreate ;; *) echo $"${OP} bad option, Usage: {start|stop|restart|up}, split action queue with','" exit 1 ;; esac done ``` 给这个docker.sh脚本可执行权限: chmod +x /home/docker/docker.sh 编写系统服务文档myContainers.service。myContainers.service文档放置于/etc/systemd/system路径下。myContainers.service的代码如下: ```sh [Unit] Description=My Container Service Requires=docker.service After=docker.service [Service] Restart=always ExecStart=bash /home/docker/docker.sh start ExecStop=bash /home/docker/docker.sh stop ExecRestart=bash /home/docker/docker.sh up [Install] WantedBy=default.target ``` 启动创建容器组服务:systemctl start myContainers.service 设置开机启动: systemctl enable myContainers.service 提示:当然,你也可以不需要docker.sh这个脚本,直接在myContainers.service里使用docker-compose 命令。需要修改的内容如下: ```sh ExecStart=/usr/local/bin/docker-compose start -f /home/docker/docker-compose.yml ExecStop=/usr/local/bin/docker-compose stop -f /home/docker/docker-compose.yml ExecRestart=/usr/local/bin/docker-compose -f /home/docker/docker-compose.yml up -d --force-recreate ``` 最后修改:2025 年 01 月 07 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏