Raspberry Pi 4 上的 Nginx 反向代理管理器在重启后不会自动启动

Nginx Reverse Proxy Manager on Raspberry Pi 4 doesn't automatically start up after reboot

我使用 docker 和 docker-compose 在我的 Raspberry Pi 上设置了 Jamie Curnow 的 Nginx 反向代理管理器。

这是 yml 堆栈文件:

---
version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    ports:
      - '80:80' #HTTP Traffic
      - '81:81' #Dashboard Port
      - '443:443' #HTTPS Traffic
    volumes:
      - ./config.json:/app/config/production.json
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
  db:
    image: 'jc21/mariadb-aria:10.4'
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
    volumes:
      - ./data/mysql:/var/lib/mysql

(我使用不同的密码)

现在,我曾经使用 sudo docker-compose up -d 编写过它,但是,每当我 sudo reboot 我的 Raspberry Pi 时,它都不会作为服务启动。

这是我的 Raspberry Pi 内核,顺便说一句:

Linux Pi-Server 5.10.17-v7l+ #1403 SMP Mon Feb 22 11:33:35 GMT 2021 armv7l GNU/L

这是我的 OS 版本:

Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

有趣的是,每当我尝试再次使用 sudo docker-compose up -d 重组它时,我都会得到以下输出:

Starting nginx_db_1  ... done
Starting nginx_app_1 ... done

之后,Mr. Curnow 的 Nginx 和它的 GUI 都工作了。

有没有比运行这个docker-每次启动时都合成更奇特的方法?

主机 -- docker 服务级别

更新:初始答案在 docker 本身内起作用。如果您希望 docker 本身也能在启动时启动,那么那就是 different story。你应该能够做到这一点:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

VM -- docker 容器级别 (nginx)

绝对可以开机启动nginx服务

命令不言自明——启用禁用,并检查状态 运行 nginx 启动:

sudo systemctl enable nginx
sudo systemctl disable nginx
sudo systemctl status nginx

资源:

  1. Launch Nginx on startup.
  2. systemd examples

如果您无法使用,请告诉我,我会尝试寻找其他方法并更新我的答案。

您还可以编辑 YML 文件,在“services:

中说“restart: always

例如像这样:

version: '3'

services:
  postgresql:
    image: postgres:9.6.6
    ports:
      - 9932:5432
    expose:
      - "5432"
    environment:
      - POSTGRES_PASSWORD=pass
    restart: always
    volumes:
      - /data:/var/lib/postgresql/data

  myapp:
    image: myapp
    links:
      - postgresql
    depends_on:
      - "postgresql"
    restart: always
    ports:
      - "5000:5000"

我还建议使用此服务目录将您的特定 docker-compose 添加为服务:

/etc/systemd/system/

在这里只需使用 nano 或 vim 创建文件。文件名并不重要,但是,它需要是一个“.service”文件,所以我推荐名称“docker-compose-app.service

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service

[Service]
WorkingDirectory=/wherever/your/docker-compose/file/is
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 = 无论您的 docker-compose 文件在哪里,请更改!)

然后您需要做的就是:

systemctl enable docker-compose-app

(如果您为它指定了不同的文件名,请在此处使用该名称)

为了确定:

sudo systemctl enable docker

这是一个Whosebug question可能会帮助您解决问题

restart: always policy 的工作原理。