Docker|Docker 入门私人笔记(十七)回顾和总结4 - harbor 的关闭和启动

Harbor 是一个企业级的 Docker 私有仓库项目,它本身由多个 Docker Containers 组成,通过 docker-compose 管理 containers 之间的依赖关系。
1. 安装 安装参见官方文档:Harbor - Installation and Configuration Guide
修改 harbor.yml 时,需要注意的有:
(1)使用 https 时,要自己生成证书,然后在 harbor.yml 里配置好证书的路径。

  • 客户端也需要安装你生成的这个证书,否则会报错。(所以证书要做好备份)
  • 详见 Docker - Use self-signed certificates
(2)data_volume 可以指定为 /data/harbor,然后要定期备份这个文件夹。(或者直接在新机器上装个 harbor,用 harbor 自带的仓库复制功能做定期备份。)
【Docker|Docker 入门私人笔记(十七)回顾和总结4 - harbor 的关闭和启动】(3)企业的话,可能还需要配置 ldap 集成验证。
然后 sudo ./install.sh 安装 harbor(貌似必须用 sudo,因为生成出来的配置文件的 owner 都是 root,而且权限设得很严格。)
安装完成后会自动启动 harbor.
2. 设置自动启动 查看 harbor 目录下的 docker-compose.yml 会发现,所有的 containers 都配置了restart: always
version: '2.3' services: log: image: goharbor/harbor-log:v1.8.1 container_name: harbor-log restart: always dns_search: . # ......registry: image: goharbor/registry-photon:v2.7.1-patch-2819-v1.8.1 container_name: registry restart: always # ......

这表示所有的容器在意外关闭后都会自动重启,比如 docker 重启或服务器重启。当然,手动 stop 不会自动重启
但是我在手动运行 docker-compose up -d,然后重启服务器后,发现有几个 container 并没有自动重启:
[ryan@ryan-pc ~]$ docker ps -a CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES f30d802002a4goharbor/nginx-photon:v1.8.1"nginx -g 'daemon of…"13 hours agoExited (128) 27 minutes ago0.0.0.0:80->80/tcpnginx 21472ce8a993goharbor/harbor-portal:v1.8.1"nginx -g 'daemon of…"13 hours agoExited (128) 27 minutes ago80/tcpharbor-portal 5d866bb17c58goharbor/harbor-jobservice:v1.8.1"/harbor/start.sh"13 hours agoExited (137) 26 minutes agoharbor-jobservice 0cf0f93b5a87goharbor/harbor-core:v1.8.1"/harbor/start.sh"13 hours agoUp 11 seconds (health: starting)harbor-core cba280d9b945goharbor/redis-photon:v1.8.1"docker-entrypoint.s…"13 hours agoExited (137) 26 minutes ago6379/tcpredis 473e46d1f746goharbor/harbor-registryctl:v1.8.1"/harbor/start.sh"13 hours agoUp 11 seconds (health: starting)registryctl 51f105f1691dgoharbor/registry-photon:v2.7.1-patch-2819-v1.8.1"/entrypoint.sh /etc…"13 hours agoExited (137) 26 minutes ago5000/tcpregistry c41594ec7779goharbor/harbor-db:v1.8.1"/entrypoint.sh post…"13 hours agoUp 11 seconds (health: starting)5432/tcpharbor-db 713bd4961772goharbor/harbor-log:v1.8.1"/bin/sh -c /usr/loc…"13 hours agoUp 11 seconds (health: starting)127.0.0.1:1514->10514/tcpharbor-log

可以看到下列五个容器都处于 Exited 状态:
goharbor/nginx-photon:v1.8.1
goharbor/harbor-portal:v1.8.1
goharbor/harbor-jobservice:v1.8.1
goharbor/redis-photon:v1.8.1
goharbor/registry-photon:v2.7.1-patch-2819-v1.8.1
搜索发现有人提过这个 issue: https://github.com/goharbor/h...
于是尝试将 harbor 配成 systemd 的 service,添加配置文件 /usr/lib/systemd/system/harbor.service,内容如下:
[Unit] Description=Harbor After=docker.service systemd-networkd.service systemd-resolved.service Requires=docker.service Documentation=http://github.com/vmware/harbor[Service] Type=simple Restart=on-failure RestartSec=5 ExecStart=/usr/local/bin/docker-compose -f {{ harbor_install_path }}/harbor/docker-compose.yml up ExecStop=/usr/local/bin/docker-compose -f {{ harbor_install_path }}/harbor/docker-compose.yml down[Install] WantedBy=multi-user.target

其中 {{ harbor_install_path }} 换成自己的 harbor 安装路径。
还有 docker-compose 的绝对路径,请通过 which docker-compose 查看。
然后启动该项服务并设置开机自动启动:
sudo systemctl start harbor sudo systemctl enable harbor

现在查看下 harbor.service 的情况:
● harbor.service - Harbor Loaded: loaded (/usr/lib/systemd/system/harbor.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2019-07-07 12:54:27 CST; 2min 4s ago Docs: http://github.com/vmware/harbor Main PID: 9734 (docker-compose) Tasks: 11 (limit: 4915) Memory: 35.7M CGroup: /system.slice/harbor.service └─9734 /usr/bin/python /usr/bin/docker-compose -f /home/ryan/harbor/docker-compose.yml up7月 07 12:54:30 ryan-pc docker-compose[9734]: [128B blob data] 7月 07 12:54:31 ryan-pc docker-compose[9734]: [167B blob data] 7月 07 12:54:31 ryan-pc docker-compose[9734]: registryctl| WARNING: no logs are available with the 'syslog' log driver 7月 07 12:54:31 ryan-pc docker-compose[9734]: registry| WARNING: no logs are available with the 'syslog' log driver 7月 07 12:54:31 ryan-pc docker-compose[9734]: harbor-db| WARNING: no logs are available with the 'syslog' log driver 7月 07 12:54:31 ryan-pc docker-compose[9734]: redis| WARNING: no logs are available with the 'syslog' log driver 7月 07 12:54:31 ryan-pc docker-compose[9734]: harbor-core| WARNING: no logs are available with the 'syslog' log driver 7月 07 12:54:31 ryan-pc docker-compose[9734]: harbor-jobservice | WARNING: no logs are available with the 'syslog' log driver 7月 07 12:54:31 ryan-pc docker-compose[9734]: harbor-portal| WARNING: no logs are available with the 'syslog' log driver 7月 07 12:54:31 ryan-pc docker-compose[9734]: nginx| WARNING: no logs are available with the 'syslog' log driver

重启再看,发现 harbor 容器组终于全部 up 了:
[ryan@ryan-pc ~]$ docker ps -a CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 90943210e354goharbor/nginx-photon:v1.8.1"nginx -g 'daemon of…"37 seconds agoUp 35 seconds (healthy)0.0.0.0:80->80/tcpnginx bc70706d7b5fgoharbor/harbor-portal:v1.8.1"nginx -g 'daemon of…"38 seconds agoUp 36 seconds (healthy)80/tcpharbor-portal 54e132bd1a10goharbor/harbor-jobservice:v1.8.1"/harbor/start.sh"38 seconds agoUp 36 secondsharbor-jobservice 28ada4a941eegoharbor/harbor-core:v1.8.1"/harbor/start.sh"39 seconds agoUp 37 seconds (healthy)harbor-core de44686f7e72goharbor/registry-photon:v2.7.1-patch-2819-v1.8.1"/entrypoint.sh /etc…"39 seconds agoUp 38 seconds (healthy)5000/tcpregistry e5efdae34c13goharbor/harbor-db:v1.8.1"/entrypoint.sh post…"39 seconds agoUp 38 seconds (healthy)5432/tcpharbor-db a5fe52e1f184goharbor/harbor-registryctl:v1.8.1"/harbor/start.sh"39 seconds agoUp 38 seconds (healthy)registryctl 4a74b5f3499agoharbor/redis-photon:v1.8.1"docker-entrypoint.s…"39 seconds agoUp 38 seconds6379/tcpredis 677fd84d0a70goharbor/harbor-log:v1.8.1"/bin/sh -c /usr/loc…"40 seconds agoUp 39 seconds (healthy)127.0.0.1:1514->10514/tcpharbor-log

本文参考:
  • Harbor containers fail to start on docker startup
  • 通过 systemctl 设置自定义 Service

    推荐阅读