1:创建 Harbor 系统服务文件
新建服务文件
在/etc/systemd/system/
目录下创建harbor.service
(若已创建过可直接修改):bash
sudo vim /etc/systemd/system/harbor.service
写入服务配置
内容如下(关键:设置依赖 Docker 服务,确保 Docker 启动后再启动 Harbor):ini
[Unit] Description=Harbor Container Registry After=docker.service # 确保 Docker 启动后再启动 Harbor Requires=docker.service # 依赖 Docker 服务,Docker 未启动则 Harbor 不启动 [Service] Type=oneshot RemainAfterExit=yes # 服务启动后保持 active 状态 WorkingDirectory=/home/shitou/harbor # 替换为你的 Harbor 安装目录(含 docker-compose.yml) ExecStart=/usr/bin/docker compose up -d # 启动命令(使用 docker compose 或 docker-compose,根据系统实际情况选择) ExecStop=/usr/bin/docker compose down # 停止命令 Restart=on-failure # 若启动失败,自动重试 [Install] WantedBy=multi-user.target # 多用户模式下自启
注意:
ExecStart
和ExecStop
中的docker compose
若提示命令不存在,替换为docker-compose
(取决于系统安装的是哪个命令)。
步骤 2:重载系统服务并启用自启
重载服务配置
让 systemd 识别新创建的服务:bash
sudo systemctl daemon-reload
设置开机自启
启用 Harbor 服务,使其在系统启动时自动运行:bash
sudo systemctl enable harbor.service
步骤 3:验证配置
查看服务状态
确认服务已正确加载:bash
sudo systemctl status harbor.service
输出应显示
Loaded: loaded (/etc/systemd/system/harbor.service; enabled; ...)
,其中enabled
表示已启用自启。手动测试启动 / 停止
测试服务是否能正常工作:bash
# 启动 Harbor sudo systemctl start harbor.service # 查看容器状态(确认 Harbor 相关容器已启动) sudo docker ps | grep harbor # 停止 Harbor(可选,仅测试用) sudo systemctl stop harbor.service
步骤 4:确保 Docker 服务已开机自启
Harbor 依赖 Docker 服务,若 Docker 未设置自启,需先启用:
bash
# 启用 Docker 开机自启
sudo systemctl enable docker
# 启动 Docker(若当前未启动)
sudo systemctl start docker
验证开机自启(可选)
重启系统后,检查 Harbor 容器是否自动启动:
bash
# 重启系统
sudo reboot
# 重启后登录,查看容器状态
sudo docker ps | grep harbor
若能看到 harbor-nginx
、harbor-core
、registry
等容器处于 Up
状态,说明开机自启配置成功。
shitou@shitou:~/harbor$ sudo systemctl enable harbor.service Failed to enable unit: "#" is not a valid unit name.
1. 检查并修正 harbor.service
文件
打开服务文件,确保内容无语法错误(特别是没有多余的 #
或特殊字符):
bash
sudo vim /etc/systemd/system/harbor.service
正确的服务文件内容(请严格对照,删除任何多余字符):
ini
[Unit]
Description=Harbor Container Registry
After=docker.service
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/shitou/harbor
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
Restart=on-failure
[Install]
WantedBy=multi-user.target
确保没有多余的
#
(注释行除外,且注释行必须以#
开头);区块
[Unit]
、[Service]
、[Install]
必须正确闭合,无拼写错误;路径(如
WorkingDirectory
、ExecStart
)中的目录和命令必须存在(可通过which docker
确认docker
路径)。
2. 检查文件是否有特殊字符
有时复制粘贴会引入不可见的特殊字符(如 ^M
),导致 systemd 解析失败:
bash
# 查看文件是否有特殊字符(正常应无乱码)
cat -v /etc/systemd/system/harbor.service
若看到
^M
等字符,需删除:在vim
中执行:set fileformat=unix
并保存(wq
)。
3. 重新加载 systemd 配置
bash
sudo systemctl daemon-reload
4. 再次尝试启用服务
bash
sudo systemctl enable harbor.service
若成功,会提示
Created symlink ...
;若仍报错,检查服务文件名是否正确(必须是
harbor.service
,无空格或特殊字符)。
补充:手动创建服务文件(避免格式错误)
如果上述步骤仍失败,可直接用以下命令重新创建服务文件(确保内容纯净):
bash
# 先删除旧文件
sudo rm -f /etc/systemd/system/harbor.service
# 重新创建并写入内容
sudo tee /etc/systemd/system/harbor.service <<-'EOF'
[Unit]
Description=Harbor Container Registry
After=docker.service
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/shitou/harbor
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF