{"id":1980,"date":"2025-06-14T17:03:46","date_gmt":"2025-06-14T09:03:46","guid":{"rendered":"http:\/\/113.45.254.23\/?p=1980"},"modified":"2025-06-14T17:03:47","modified_gmt":"2025-06-14T09:03:47","slug":"%e9%83%a8%e7%bd%b2docker%e9%95%9c%e5%83%8f%e4%bb%93%e5%ba%93harbor","status":"publish","type":"post","link":"http:\/\/113.45.254.23\/?p=1980","title":{"rendered":"\u90e8\u7f72docker\u955c\u50cf\u4ed3\u5e93harbor"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u4e00\u3001\u5b9e\u9a8c\u73af\u5883\uff1a<\/h2>\n\n\n\n<p>\u8fd8\u539f\u81f3\uff1adocker compose\u5bb9\u5668\u7f16\u6392\uff0c\u5185\u5b588G\uff0c4\u6838CPU\uff0c\u6dfb\u52a0\u4e00\u5757100G\u786c\u76d8<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-94.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"287\" data-original=\"http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-94.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-1981\"  sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-95.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"544\" data-original=\"http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-95.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-1982\"  sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e8c\u3001\u5bf9sdb\u78c1\u76d8\u683c\u5f0f\u5316\uff0c\u540e\u5206\u533a<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@server11 ~]# reboot\n&#91;root@server11 ~]# Connection closing...Socket close.\n\nConnection closed by foreign host.\n\nDisconnected from remote host(192.168.7.11) at 16:00:24.\n\nType `help' to learn how to use Xshell prompt.\n&#91;C:\\~]$ \n\nConnecting to 192.168.7.11:22...\nConnection established.\nTo escape to local shell, press 'Ctrl+Alt+]'.\n\nWARNING! The remote SSH server rejected X11 forwarding request.\nActivate the web console with: systemctl enable --now cockpit.socket\n\nLast login: Thu Jun 12 15:59:43 2025 from 192.168.7.1\n&#91;root@server11 ~]# fdisk -l\t\t\u67e5\u770b\u5206\u533a\u60c5\u51b5\nDisk \/dev\/sdb: 100 GiB, 107374182400 bytes, 209715200 sectors\t\u67e5\u770b\u7684\u6302\u8f7d\u786c\u76d8\nDisk model: VMware Virtual S\nUnits: sectors of 1 * 512 = 512 bytes\nSector size (logical\/physical): 512 bytes \/ 512 bytes\nI\/O size (minimum\/optimal): 512 bytes \/ 512 bytes\n\n\nDisk \/dev\/sda: 100 GiB, 107374182400 bytes, 209715200 sectors\nDisk model: VMware Virtual S\nUnits: sectors of 1 * 512 = 512 bytes\nSector size (logical\/physical): 512 bytes \/ 512 bytes\nI\/O size (minimum\/optimal): 512 bytes \/ 512 bytes\nDisklabel type: dos\nDisk identifier: 0x2defc99f\n\nDevice     Boot   Start       End   Sectors  Size Id Type\n\/dev\/sda1          2048      6143      4096    2M 83 Linux\n\/dev\/sda2  *       6144   1030143   1024000  500M 83 Linux\n\/dev\/sda3       1030144 209715199 208685056 99.5G 8e Linux LVM\n\n\nDisk \/dev\/mapper\/rl-root: 95.51 GiB, 102550732800 bytes, 200294400 sectors\nUnits: sectors of 1 * 512 = 512 bytes\nSector size (logical\/physical): 512 bytes \/ 512 bytes\nI\/O size (minimum\/optimal): 512 bytes \/ 512 bytes\n\n\nDisk \/dev\/mapper\/rl-swap: 4 GiB, 4294967296 bytes, 8388608 sectors\nUnits: sectors of 1 * 512 = 512 bytes\nSector size (logical\/physical): 512 bytes \/ 512 bytes\nI\/O size (minimum\/optimal): 512 bytes \/ 512 bytes\n&#91;root@server11 ~]# \n&#91;root@server11 ~]# gdisk \/dev\/sdb \u5bf9sdb\u78c1\u76d8\u8fdb\u884c\u5206\u533a\nGPT fdisk (gdisk) version 1.0.7\n\nPartition table scan:\n  MBR: not present\n  BSD: not present\n  APM: not present\n  GPT: not present\n\nCreating new GPT entries in memory.\n\nCommand (? for help): n\t\t\u65b0\u5efa\u5206\u533a\nPartition number (1-128, default 1): 1\t\t\u521b\u5efa\u7b2c\u4e00\u4e2a\u4e3b\u5bfc\u5206\u533a\nFirst sector (34-209715166, default = 2048) or {+-}size{KMGTP}:    \u8d77\u59cb\u4f4d\u7f6e\uff08\u4e3a\u7a7a\uff09\u4fdd\u6301\u9ed8\u8ba4\nLast sector (2048-209715166, default = 209715166) or {+-}size{KMGTP}: \nCurrent type is 8300 (Linux filesystem)\nHex code or GUID (L to show codes, Enter = 8300): \nChanged type of partition to 'Linux filesystem'\n\nCommand (? for help): w\t\t\t\u4fdd\u5b58\u5e76\u9000\u51fa\n\nFinal checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING\nPARTITIONS!!\n\nDo you want to proceed? (Y\/N): y\t\t\nOK; writing new GUID partition table (GPT) to \/dev\/sdb.\nThe operation has completed successfully.\n&#91;root@server11 ~]# \n&#91;root@server11 ~]# mkfs.xfs \/dev\/sdb1\t\t\u7528\u6587\u4ef6\u7cfb\u7edf\u4e3axfs\u683c\u5f0f\u5316sdb2\u7684\u78c1\u76d8\nmeta-data=\/dev\/sdb1              isize=512    agcount=4, agsize=6553535 blks\n         =                       sectsz=512   attr=2, projid32bit=1\n         =                       crc=1        finobt=1, sparse=1, rmapbt=0\n         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0\ndata     =                       bsize=4096   blocks=26214139, imaxpct=25\n         =                       sunit=0      swidth=0 blks\nnaming   =version 2              bsize=4096   ascii-ci=0, ftype=1\nlog      =internal log           bsize=4096   blocks=16384, version=2\n         =                       sectsz=512   sunit=0 blks, lazy-count=1\nrealtime =none                   extsz=4096   blocks=0, rtextents=0\n&#91;root@server11 ~]# \n&#91;root@server11 ~]# mkdir \/data\t\t\t\u9012\u5f52\u521b\u5efa\u78c1\u76d8\u6302\u8f7d\u7684V1\uff0cV2\u76ee\u5f55\n&#91;root@server11 ~]# blkid\t\t\t\t\n\/dev\/mapper\/rl-swap: UUID=\"9ee0c220-9558-45f9-9c57-de6ff07591b5\" TYPE=\"swap\"\n\/dev\/sdb1: UUID=\"6637b8d0-a247-4be1-a6f9-88d488497459\" TYPE=\"xfs\" PARTLABEL=\"Linux filesystem\" PARTUUID=\"cbee5e00-3e5f-4dfa-84d7-5e0ec14e17af\"\n\/dev\/sr0: UUID=\"2024-11-16-01-52-31-00\" LABEL=\"Rocky-9-5-x86_64-dvd\" TYPE=\"iso9660\" PTUUID=\"5d896d99\" PTTYPE=\"dos\"\n\/dev\/mapper\/rl-root: UUID=\"d4a7b5e1-2ee1-4e30-8100-18c2c4ebcc02\" TYPE=\"xfs\"\n\/dev\/sda2: UUID=\"a382267c-95f6-4e5a-9180-52f02890f391\" TYPE=\"xfs\" PARTUUID=\"2defc99f-02\"\n\/dev\/sda3: UUID=\"BEqe5L-VFGE-VH11-m82D-o6UP-LDqm-x0sASf\" TYPE=\"LVM2_member\" PARTUUID=\"2defc99f-03\"\n\/dev\/sda1: PARTUUID=\"2defc99f-01\"\n&#91;root@server11 ~]# vim \/etc\/fstab\t\t\t\u7f16\u8f91\u5f00\u673a\u542f\u52a8\u914d\u7f6e\u6587\u4ef6\nUUID=6637b8d0-a247-4be1-a6f9-88d488497459 \/data xfs     defaults        0 0\n\u8868\u793asdb1\u7684\u78c1\u76d8\u6302\u8f7d\u5230data\u76ee\u5f55\u4e0b\t\txfs\u6587\u4ef6\u7cfb\u7edfxfs\t\t\u9ed8\u8ba4\u53c2\u6570\t\t\u4e0d\u5907\u4efd\t\t\u4e0d\u68c0\u67e5\u78c1\u76d8\n&#91;root@server11 ~]# systemctl daemon-reload\t\u91cd\u65b0\u52a0\u8f7d\u7cfb\u7edf\u8fdb\u7a0b\n&#91;root@server11 ~]# \n&#91;root@server11 ~]# mount -a\t\t\t\u91cd\u65b0\u52a0\u8f7d\u6302\u8f7d\u9879\n&#91;root@server11 ~]# df -hT\t\t\t\u67e5\u770b\u78c1\u76d8\u5bb9\u91cf\nFilesystem          Type      Size  Used Avail Use% Mounted on\ndevtmpfs            devtmpfs  4.0M     0  4.0M   0% \/dev\ntmpfs               tmpfs     3.8G     0  3.8G   0% \/dev\/shm\ntmpfs               tmpfs     1.5G  9.1M  1.5G   1% \/run\n\/dev\/mapper\/rl-root xfs        96G  4.7G   91G   5% \/\n\/dev\/sda2           xfs       436M  397M   40M  91% \/boot\ntmpfs               tmpfs     765M  4.0K  765M   1% \/run\/user\/0\n\/dev\/sdb1           xfs       100G  746M  100G   1% \/data\n&#91;root@server11 ~]# <\/code><\/pre>\n\n\n\n<p>registry\u4e0d\u80fd\u8fdc\u7a0b\uff0c\u53ea\u80fd\u672c\u5730\u767b\u5f55\uff0c\u5b57\u7b26\u754c\u9762\u3002Harbor \u56fe\u5f62\u754c\u9762\uff0c\u53ef\u4ee5\u8fdc\u7a0b\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e09\u3001\u66f4\u6539\u540d\u79f0\u4e3aharbor.cn<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@server10 ~]# hostnamectl set-hostname harbor.cn\t\u66f4\u6539\u540d\u79f0\u4e3aharbor.cn\n&#91;root@server10 ~]# exit<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u56db\u3001\u521b\u5efa\u5bc6\u94a5\u548c\u8bc1\u4e66<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@harbor ~]# mkdir \/data\/ssl\t\t\u521b\u5efassl\u76ee\u5f55\t\n&#91;root@harbor ~]# \n&#91;root@harbor ~]# cd \/data\/ssl\n&#91;root@harbor ssl]# openssl genrsa -out ca.key 3072  \u521b\u5efaca\u7684\u79c1\u94a5  3072\uff1a\u79c1\u94a5\u5bc6\u94a5\u7684\u957f\u5ea6\n&#91;root@harbor ssl]# \n&#91;root@harbor ssl]# ls\nca.key\n&#91;root@harbor ssl]# openssl req -new -x509 -days 3650 -key ca.key -out ca.pem\nYou are about to be asked to enter information that will be incorporated\ninto your certificate request.\nWhat you are about to enter is what is called a Distinguished Name or a DN.\nThere are quite a few fields but you can leave some blank\nFor some fields there will be a default value,\nIf you enter '.', the field will be left blank.\n-----\nCountry Name (2 letter code) &#91;XX]:CN\nState or Province Name (full name) &#91;]:BJ\nLocality Name (eg, city) &#91;Default City]:BJ\nOrganization Name (eg, company) &#91;Default Company Ltd]:harbor.cn\nOrganizational Unit Name (eg, section) &#91;]:K8S\nCommon Name (eg, your name or your server's hostname) &#91;]:Zoe \nEmail Address &#91;]:1319276778@qq.com\n&#91;root@harbor ssl]# ls\nca.key  ca.pem\n&#91;root@harbor ssl]# \n&#91;root@harbor ssl]# openssl genrsa -out harbor.key 3072\n&#91;root@harbor ssl]# \n&#91;root@harbor ssl]# openssl req -new -key harbor.key -out harbor.csr\nYou are about to be asked to enter information that will be incorporated\ninto your certificate request.\nWhat you are about to enter is what is called a Distinguished Name or a DN.\nThere are quite a few fields but you can leave some blank\nFor some fields there will be a default value,\nIf you enter '.', the field will be left blank.\n-----\nCountry Name (2 letter code) &#91;XX]:CN\nState or Province Name (full name) &#91;]:BJ\nLocality Name (eg, city) &#91;Default City]:NJ\nOrganization Name (eg, company) &#91;Default Company Ltd]:harbor.cn\nOrganizational Unit Name (eg, section) &#91;]:k8s\nCommon Name (eg, your name or your server's hostname) &#91;]:Zoe\nEmail Address &#91;]:1319276778@qq.com\n\nPlease enter the following 'extra' attributes\nto be sent with your certificate request\nA challenge password &#91;]:\nAn optional company name &#91;]:\n&#91;root@harbor ssl]# <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e94\u3001\u7b7e\u53d1\u8bc1\u4e66<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@harbor ssl]# openssl x509 -req -in harbor.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out harbor.pem -days 3650\t\t\u7b7e\u53d1\u8bc1\u4e66 \u6709\u6548\u671f\uff1a3650\u5929\nCertificate request self-signature ok\nsubject=C=CN, ST=BJ, L=NJ, O=harbor.cn, OU=k8s, CN=Zoe, emailAddress=1319276778@qq.com\n&#91;root@harbor ssl]# vim \/etc\/chrony.conf\t\t\u7f16\u8f91\u65f6\u95f4\u540c\u6b65\u914d\u7f6e\u6587\u4ef6\n#pool 2.rocky.pool.ntp.org iburst\npool.ntp.aliyun.com iburst\n&#91;root@harbor ssl]# systemctl enable --now chronyd\n&#91;root@harbor ssl]# \n&#91;root@harbor ssl]# \n&#91;root@harbor ssl]# chronyc sources -v\n\n  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.\n \/ .- Source state '*' = current best, '+' = combined, '-' = not combined,\n| \/             'x' = may be in error, '~' = too variable, '?' = unusable.\n||                                                 .- xxxx &#91; yyyy ] +\/- zzzz\n||      Reachability register (octal) -.           |  xxxx = adjusted offset,\n||      Log2(Polling interval) --.      |          |  yyyy = measured offset,\n||                                \\     |          |  zzzz = estimated error.\n||                                 |    |           \\\nMS Name\/IP address         Stratum Poll Reach LastRx Last sample               \n===============================================================================\n^+ tock.ntp.infomaniak.ch        1   9   175     6    -13ms&#91;  -13ms] +\/-   87ms\n^* 119.28.206.193                2   8   337   130  +2653us&#91;+3219us] +\/-   66ms\n^+ time.cloudflare.com           3   9   377    67  +7877us&#91;+7877us] +\/-  111ms\n^+ 139.199.215.251               2   8   357   197  +1459us&#91;+2010us] +\/-   40ms\n&#91;root@harbor ssl]# date \nThu Jun 12 04:47:14 PM CST 2025\n&#91;root@harbor ssl]# clock -w\n&#91;root@harbor ssl]# <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u516d\u3001\u8fdb\u5165\u8ba1\u5212\u4efb\u52a1\u3001\u68c0\u67e5\u670d\u52a1\u72b6\u6001<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@harbor ssl]# crontab -e\t\t\t\t\t\u8fdb\u5165\u8ba1\u5212\u4efb\u52a1  \n* * * * * \/usr\/bin\/systemctl status chronyd || \/usr\/bin\/systemctl restart chronyd \u5148\u68c0\u67e5\u670d\u52a1\u72b6\u6001\uff0c\u4ec5\u5728\u5f02\u5e38\u65f6\u91cd\u542f\u65f6\u95f4\u540c\u6b65\uff08*\u5206\u949f *\u5c0f\u65f6 *\u65e5 *\u6708 *\u661f\u671f\uff09\n&#91;root@harbor ssl]# crontab -l\n* * * * * \/usr\/bin\/systemctl restart chronyd\n&#91;root@harbor ssl]# hostname \nharbor\n&#91;root@harbor ssl]# vim \/etc\/hosts\n192.168.7.11 harbor.cn\n&#91;root@harbor ssl]# systemctl status docker\n\u25cf docker.service - Docker Application Container Engine\n     Loaded: loaded (\/usr\/lib\/systemd\/system\/docker.service; enabled; preset: disabled)\n     Active: active (running) since Thu 2025-06-12 16:00:42 CST; 59min ago\nTriggeredBy: \u25cf docker.socket\n       Docs: https:\/\/docs.docker.com\n   Main PID: 1015 (dockerd)\n      Tasks: 10\n     Memory: 106.2M\n        CPU: 877ms\n     CGroup: \/system.slice\/docker.service\n             \u2514\u25001015 \/usr\/bin\/dockerd -H fd:\/\/ --containerd=\/run\/containerd\/containerd.sock<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e03\u3001\u52a0\u8f7d\u5185\u6838\u6a21\u5757\u3001\u521b\u5efadocker\u914d\u7f6e\u6587\u4ef6<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@harbor ssl]# docker compose version\nDocker Compose version v2.36.2\n&#91;root@harbor ssl]# modprobe br_netfilter filter\t\t\u76f4\u63a5\u52a0\u8f7d\u5185\u6838\u6a21\u5757\n&#91;root@harbor ssl]# vim \/etc\/sysctl.d\/docker.conf\t\t\u521b\u5efadocker\u914d\u7f6e\u6587\u4ef6\nnet.bridge.bridge-nf-call-ip6tables = 1\t\t\u542f\u7528\u7f51\u6865\u5bf9ipv6\u6570\u636e\u5305\u7684ip6tables\u7684\u89c4\u5219\u5e94\u7528\nnet.bridge.bridge-nf-call-iptables = 1\t\t\u542f\u7528\u7f51\u6865\u5bf9ipv4\u6570\u636e\u5305\u7684iptables\u7684\u89c4\u5219\u5e94\u7528\nnet.ipv4.ip_forward = 1\t\t\t\t\t\u542f\u7528IPV4\u8f6c\u53d1\n&#91;root@harbor ssl]# <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u516b\u3001\u521b\u5efainstall\u76ee\u5f55\u548c\u5305\u89e3\u538bharbor\u79bb\u7ebf\u8f6f\u4ef6\u5305<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@harbor ssl]# mkdir \/data\/install\t\t\t\u521b\u5efainstall\u76ee\u5f55\n&#91;root@harbor ssl]# \n&#91;root@harbor ssl]# cd \/data\/install\t\t\t\u8fdb\u5165\u5230install\u76ee\u5f55\u4e0b\n&#91;root@harbor install]# tar zxf harbor-offline-installer-v2.7.3.tgz tar\u5305\u89e3\u538bharbor\u79bb\u7ebf\u8f6f\u4ef6\u5305\n&#91;root@harbor install]# ls\nharbor  harbor-offline-installer-v2.7.3.tgz\t\t\u8fdb\u5165harbor\u76ee\u5f55\t \n&#91;root@harbor install]# cd harbor\/\n&#91;root@harbor harbor]# ls\ncommon.sh  harbor.v2.7.3.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare\n&#91;root@harbor harbor]# <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e5d\u3001\u5c06harbor\u6a21\u677f\uff08tmpl\uff09\u6587\u4ef6\u590d\u5236\u7ed9harbor\u914d\u7f6e\u6587\u4ef6\u3001\u7f16\u8f91harbor\u914d\u7f6e\u6587\u4ef6<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@harbor harbor]# \n&#91;root@harbor harbor]# cp harbor.yml.tmpl harbor.yml\t\t\u5c06harbor\u6a21\u677f\uff08tmpl\uff09\u6587\u4ef6\u590d\u5236\u7ed9harbor\u914d\u7f6e\u6587\u4ef6\n&#91;root@harbor harbor]# \n&#91;root@harbor harbor]# vim harbor.yml\t\t\t\u7f16\u8f91harbor\u914d\u7f6e\u6587\u4ef6\n5 hostname: harbor.cn\t\t\t\u4e3b\u673a\u540dharbor.cn\n17   certificate: \/data\/ssl\/harbor.pem\t\u6307\u5b9a\u8bc1\u4e66\u6587\u4ef6\u7684\u4f4d\u7f6e\n18   private_key: \/data\/ssl\/harbor.key\t\u6307\u5b9a\u5bc6\u94a5\u6587\u4ef6\u7684\u4f4d\u7f6e\n34 harbor_admin_password: Harbor12345 (\u53ef\u6539\u53ef\u4e0d\u6539)\tharbor\u7ba1\u7406\u5458\u5bc6\u7801\u4e3a\uff1aharbor12345<\/code><\/pre>\n\n\n\n<p>[root@harbor harbor]# cd ..<\/p>\n\n\n\n<p>[root@harbor install]# ls<\/p>\n\n\n\n<p>harbor &nbsp;harbor-offline-installer-v2.7.3.tgz<\/p>\n\n\n\n<p>[root@harbor install]#<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5341\u3001\u5b89\u88c5harbor<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@harbor harbor]# ls\ncommon.sh  harbor.v2.7.3.tar.gz  harbor.yml  harbor.yml.tmpl  install.sh  LICENSE  prepare\n&#91;root@harbor harbor]# .\/install.sh\t\t\t\u5b89\u88c5harbor\n\n&#91;Step 0]: checking if docker is installed ...\n\nNote: docker version: 28.2.2\n\n&#91;Step 1]: checking docker-compose is installed ...<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u5341\u4e00\u3001\u5efa\u7acb\u4e3b\u673a\u6620\u5c04<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-96.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"691\" height=\"521\" data-original=\"http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-96.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-1983\"  sizes=\"auto, (max-width: 691px) 100vw, 691px\" \/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-97.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"484\" data-original=\"http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-97.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-1984\"  sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-98.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"693\" height=\"592\" data-original=\"http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-98.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-1985\"  sizes=\"auto, (max-width: 693px) 100vw, 693px\" \/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-99.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"295\" data-original=\"http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-99.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-1986\"  sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u5341\u4e8c\u3001\u5f00\u542f\u53e6\u5916\u4e00\u53f0server12\u673a\u5668\uff0c\u4f5c\u4e3a\u5ba2\u6237\u673a<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1\u3001\u5b9e\u9a8c\u73af\u5883\uff1a\u5feb\u7167\u8fd8\u539f\u81f3docker\uff0c\u5f00\u673a\u3002<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-100.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"693\" height=\"315\" data-original=\"http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-100.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-1987\"  sizes=\"auto, (max-width: 693px) 100vw, 693px\" \/><\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">2\u3001\u7f16\u8f91docker\u8fdb\u7a0b\u7684\u914d\u7f6e\u6587\u4ef6<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@Server12 ~]# vim \/etc\/docker\/daemon.json server12\u662f\u5ba2\u6237\u673a  \u7f16\u8f91docker\u8fdb\u7a0b\u7684\u914d\u7f6e\u6587\u4ef6\n        \"https:\/\/registry.docker-cn.com\"\n    ],\t\t\t\t\t\t\t\t\t\u201c\u52a0\u70b9\u513f\u201d\n    \"insecure-registries\": &#91;\"192.168.7.11\",\"harbor.cn\"]\t\t\u4f7f\u7528http\uff0cIP\u5730\u5740\uff1a192.168.7.10\uff0c\u4ed3\u5e93\u57df\u540d\uff1aharbor.cn\n}\n&#91;root@Server12 ~]# \n&#91;root@Server12 ~]# systemctl daemon-reload\t\t\u91cd\u65b0\u52a0\u8f7d\u7cfb\u7edf\u8fdb\u7a0b\n&#91;root@Server12 ~]# systemctl restart docker\t\t\t\u91cd\u542fdocker<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">3\u3001\u7f16\u8f91hosts\u6587\u4ef6<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@Server12 ~]# vim \/etc\/hosts\t\t\t\t\u7f16\u8f91hosts\u6587\u4ef6\n127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4\n::1         localhost localhost.localdomain localhost6 localhost6.localdomain6\n192.168.7.12 server12\t\t\u521b\u5efaIP\u5730\u5740\u4e0e\u4e3b\u673a\u57df\u540d\u4e4b\u95f4\u7684\u6620\u5c04\n192.168.7.11 harbor.cn<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">4\u3001\u5c06hosts\u6587\u4ef6\u8fdc\u7a0b\u590d\u5236\u5230192.168.7.10\u7684hosts\u6587\u4ef6\u4e0a<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@Server12 ~]# scp \/etc\/hosts 192.168.7.11:\/etc\/hosts\t\t\t\t\t\t\t\t\n\u5c06hosts\u6587\u4ef6\u8fdc\u7a0b\u590d\u5236\u5230192.168.7.10\u7684hosts\u6587\u4ef6\u4e0a\nThe authenticity of host '192.168.7.11 (192.168.7.11)' can't be established.\nED25519 key fingerprint is SHA256:xUDA0O+t2CzJjkoXTnPz4uWZHLsBka7X2jWeyssMSNo.\nThis key is not known by any other names\nAre you sure you want to continue connecting (yes\/no\/&#91;fingerprint])? yes     \nWarning: Permanently added '192.168.7.11' (ED25519) to the list of known hosts.\nroot@192.168.7.11's password: \nhosts                                                                                  100%  203   186.9KB\/s   00:00    \n&#91;root@Server12 ~]# <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">5.\u6d4b\u8bd5\u4eceharbor\u62c9\u53d6nginx\u955c\u50cf,\u4e0a\u4f20\u955c\u50cf\u81f3harbor<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@Server12 ~]# docker pull nginx:1.26.0\u4eceharbor\u4ed3\u5e93\u4e2d\u62c9\u53d6nginx\u955c\u50cf\n1.26.0: Pulling from library\/nginx\nDigest: sha256:192e88a0053c178683ca139b9d9a2afb0ad986d171fae491949fe10970dd9da9\nStatus: Image is up to date for nginx:1.26.0\ndocker.io\/library\/nginx:1.26.0\n&#91;root@Server12 ~]# docker tag nginx:1.26.0 192.168.7.11\/test\/nginx:1.26.0 \u5c06nginx1.26.0\u7684\u955c\u50cf\u6253\u6807\u8bb0 \t\n&#91;root@Server12 ~]# docker images\nREPOSITORY                TAG       IMAGE ID       CREATED         SIZE\n192.168.7.11\/test\/nginx   1.26.0    94543a6c1aef   13 months ago   188MB\nnginx                     1.26.0    94543a6c1aef   13 months ago   188MB\n&#91;root@Server12 ~]# docker push 192.168.7.11\/test\/nginx:1.26.0\t\u5c06nginx:1.26.0\u7684\u955c\u50cf\u4e0a\u4f20\u5230harbor\u4ed3\u5e93\u4e2d\nThe push refers to repository &#91;192.168.7.11\/test\/nginx]\n55ee6a06cb8d: Preparing \n619ad0127e6b: Preparing \n7e7eba133fb8: Preparing \n8fec15e62229: Preparing \nabf5f31b6a0b: Preparing \nb64902b7f501: Waiting \n5d4427064ecc: Waiting \nunauthorized: unauthorized to access repository: test\/nginx, action: push: unauthorized to access repository: test\/nginx, action: push\n&#91;root@Server12 ~]# docker login 192.168.7.11\t\tdocker\u767b\u5f55192.168.7.11\u7684harbor\u4ed3\u5e93\nUsername: admin\t\t\t\u8f93\u5165\u7ba1\u7406\u5458\nPassword: \t\t\t\tHarbor12345\n\nWARNING! Your credentials are stored unencrypted in '\/root\/.docker\/config.json'.\nConfigure a credential helper to remove this warning. See\nhttps:&#47;&#47;docs.docker.com\/go\/credential-store\/\n\nLogin Succeeded\t\t\u51fa\u73b0\u8fd9\u4e2a\uff0c\u8868\u793a\u767b\u5f55\u6210\u529f\n&#91;root@server11 ~]# docker tag nginx:1.26.0 192.168.7.10\/test\/nginx:1.26.0\t\u5c06nginx1.26.0\u7684\u955c\u50cf\u6253\u6807\u8bb0\n192.168.7.10\/test\/nginx:1.26.0 harbor\u4ed3\u5e93\u7684\u6807\u8bb0\n&#91;root@Server12 ~]# docker push 192.168.7.11\/test\/nginx:1.26.0\t\t\u5c06nginx:1.26.0\u7684\u955c\u50cf\u4e0a\u4f20\u5230harbor\u4ed3\u5e93\u4e2d\nThe push refers to repository &#91;192.168.7.11\/test\/nginx]\n55ee6a06cb8d: Pushed \n619ad0127e6b: Pushed \n7e7eba133fb8: Pushed \n8fec15e62229: Pushed \nabf5f31b6a0b: Pushed \nb64902b7f501: Pushed \n5d4427064ecc: Pushed \n1.26.0: digest: sha256:433f8e57ead89502d08cf5bab5e1bb22760711ed29218d29ea520a5aac344672 size: 1778\n&#91;root@Server12 ~]# <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u5341\u4e09\u3001\u6d4b\u8bd5\u662f\u5426\u4e0a\u4f20\u955c\u50cf\u6210\u529f\uff1a<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-101.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"387\" data-original=\"http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-101.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-1988\"  sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-102.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"156\" data-original=\"http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-102.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-1989\"  sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-103.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"877\" data-original=\"http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-103.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-1990\"  sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-104.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"295\" data-original=\"http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-104.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-1991\"  sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/div><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@Server13 ~]# docker load &lt; mariadb10.5.2.tar \nb7f7d2967507: Loading layer  65.58MB\/65.58MB\na6ebef4a95c3: Loading layer  991.2kB\/991.2kB\n838a37a24627: Loading layer  15.87kB\/15.87kB\n28ba7458d04b: Loading layer  3.072kB\/3.072kB\nfadf5ecbe4d4: Loading layer  402.9kB\/402.9kB\n8179bbf82947: Loading layer  11.12MB\/11.12MB\n78452794b5bd: Loading layer  3.886MB\/3.886MB\ne0b9a9a4c57f: Loading layer  1.536kB\/1.536kB\n2df470f82b36: Loading layer  4.695MB\/4.695MB\nd0abe7e5ebab: Loading layer  8.704kB\/8.704kB\ndfce0ddc1750: Loading layer   5.12kB\/5.12kB\nab30662e1c24: Loading layer  279.5MB\/279.5MB\n2a75ca7bbb37: Loading layer  15.36kB\/15.36kB\nLoaded image: mariadb:10.5.2\n&#91;root@Server13 ~]# <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u5341\u56db\u30017.11\u548c7.13\u673a\u5668\u4e0a\u4fee\u6539host\u6587\u4ef6<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@Server13 ~]# vim \/etc\/hosts\n192.168.7.13 server13\n192.168.7.11 harbor.cn\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@harbor harbor]# vim \/etc\/hosts\n127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4\n::1         localhost localhost.localdomain localhost6 localhost6.localdomain6\n192.168.7.12 server12\n192.168.7.11 harbor.cn\n192.168.7.13 server13\n~ <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u5341\u4e94\u3001\u5c06mariadb10.5.2\u7684\u955c\u50cf\u4e0a\u4f20\u5230\u4ed3\u5e93\u4e2d\uff0c\u4e0a\u4f20\u5931\u8d25<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@Server13 ~]# docker login 192.168.7.11\t\tdocker\u767b\u5f55192.168.7.11\u7684\u4ed3\u5e93\nUsername: jobs\t\t\t\t\t\t\t\t\u7528\u6237\uff1ajobs\nPassword: \n\nWARNING! Your credentials are stored unencrypted in '\/root\/.docker\/config.json'.\nConfigure a credential helper to remove this warning. See\nhttps:&#47;&#47;docs.docker.com\/go\/credential-store\/\n\nLogin Succeeded\n&#91;root@Server13 ~]# docker images\nREPOSITORY   TAG       IMAGE ID       CREATED       SIZE\nmariadb      10.5.2    fd055a110f74   5 years ago   360MB\n&#91;root@Server13 ~]# \n&#91;root@Server13 ~]# \n&#91;root@Server13 ~]# docker tag mariadb:10.5.2 192.168.7.11\/book\/mariadb:10.5.2\t\tdocker\u5c06mariadb10.5.2\u7684\u955c\u50cf\u6253\u4e0aharbor\u4ed3\u5e93\u7684\u6807\u8bb0\n&#91;root@Server13 ~]# docker images\nREPOSITORY                  TAG       IMAGE ID       CREATED       SIZE\n192.168.7.11\/book\/mariadb   10.5.2    fd055a110f74   5 years ago   360MB\nmariadb                     10.5.2    fd055a110f74   5 years ago   360MB\n&#91;root@Server13 ~]# docker push 192.168.7.11\/book\/mariadb:10.5.2\t\tdocker\u5c06mariadb10.5.2\u7684\u955c\u50cf\u4e0a\u4f20\u5230\u4ed3\u5e93\u4e2d\nThe push refers to repository &#91;192.168.7.11\/book\/mariadb]\n2a75ca7bbb37: Pushed \nab30662e1c24: Pushed \ndfce0ddc1750: Pushed \nd0abe7e5ebab: Pushed \n2df470f82b36: Pushed \ne0b9a9a4c57f: Pushed \n78452794b5bd: Pushed \n8179bbf82947: Pushed \nfadf5ecbe4d4: Pushed \n28ba7458d04b: Pushed \n838a37a24627: Pushed \na6ebef4a95c3: Pushed \nb7f7d2967507: Pushed \n10.5.2: digest: sha256:5d8f0d6ef1de0d626fc26355f2ed8965f91f7eb91273087d89e3321e27f16dd7 size: 3034<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u5341\u4e94\u3001\u67e5\u770b\u4e00\u4e0b\u955c\u50cf\u4e0a\u4f20\u6210\u529f\u6ca1\uff1a<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-105.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"258\" data-original=\"http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-105.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-1992\"  sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-106.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"181\" data-original=\"http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-106.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-1993\"  sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u5341\u516d\u3001\u6dfb\u52a0jobs\u8bbf\u5ba2\u7528\u6237<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-108.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"691\" height=\"262\" data-original=\"http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-108.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-1995\"  sizes=\"auto, (max-width: 691px) 100vw, 691px\" \/><\/div><\/figure>\n\n\n\n<p>[root@Server13 ~]# reboot \u91cd\u542f\u5ba2\u6237\u673a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@Server13 ~]# docker logout\nRemoving login credentials for https:\/\/index.docker.io\/v1\/\n&#91;root@Server13 ~]# docker pull 192.168.7.11\/test\/nginx:1.26.0\t\tdockers\u62c9\u53d6192.168.7.10harbor\u4ed3\u5e93\u4e2d\u7684nginx1.26.0\u7684\u955c\u50cf\n1.26.0: Pulling from test\/nginx\n09f376ebb190: Pull complete \n78240426b67a: Pull complete \nc08c0ae256e2: Pull complete \n10463a6831a8: Pull complete \nbd444d50f7de: Pull complete \n8785af845a38: Pull complete \n694e3980a1e1: Pull complete \nDigest: sha256:433f8e57ead89502d08cf5bab5e1bb22760711ed29218d29ea520a5aac344672\nStatus: Downloaded newer image for 192.168.7.11\/test\/nginx:1.26.0\n192.168.7.11\/test\/nginx:1.26.0\n&#91;root@Server13 ~]# docker iamges\ndocker: unknown command: docker iamges\n\nRun 'docker --help' for more information\n&#91;root@Server13 ~]# docker images\nREPOSITORY                  TAG       IMAGE ID       CREATED         SIZE\n192.168.7.11\/test\/nginx     1.26.0    94543a6c1aef   13 months ago   188MB\t\u6709\u4e86\n192.168.7.11\/book\/mariadb   10.5.2    fd055a110f74   5 years ago     360MB\nmariadb                     10.5.2    fd055a110f74   5 years ago     360MB\n&#91;root@Server13 ~]# docker push 192.168.7.11\/test\/mariadb\nUsing default tag: latest\nThe push refers to repository &#91;192.168.7.11\/test\/mariadb]\nAn image does not exist locally with the tag: 192.168.7.11\/test\/mariadb\n&#91;root@Server13 ~]# <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@Server13 ~]# docker images\nREPOSITORY                  TAG       IMAGE ID       CREATED         SIZE\n192.168.7.11\/test\/nginx     1.26.0    94543a6c1aef   13 months ago   188MB\n192.168.7.11\/book\/mariadb   10.5.2    fd055a110f74   5 years ago     360MB\nmariadb                     10.5.2    fd055a110f74   5 years ago     360MB\n&#91;root@Server13 ~]# docker push 192.168.7.11\/test\/mariadb\nUsing default tag: latest\nThe push refers to repository &#91;192.168.7.11\/test\/mariadb]\nAn image does not exist locally with the tag: 192.168.7.11\/test\/mariadb\n&#91;root@Server13 ~]# \n&#91;root@Server13 ~]# docker images\nREPOSITORY                  TAG       IMAGE ID       CREATED         SIZE\n192.168.7.11\/test\/nginx     1.26.0    94543a6c1aef   13 months ago   188MB\n192.168.7.11\/book\/mariadb   10.5.2    fd055a110f74   5 years ago     360MB\nmariadb                     10.5.2    fd055a110f74   5 years ago     360MB\n&#91;root@Server13 ~]# docker tag mariadb:10.5.2 192.168.7.11\/test\/mariadb:10.5.2\n&#91;root@Server13 ~]# \n&#91;root@Server13 ~]# docker push mariadb  192.168.7.11\/test\/mariadb:10.5.2\ndocker: 'docker push' requires 1 argument\n\nUsage:  docker push &#91;OPTIONS] NAME&#91;:TAG]\n\nRun 'docker push --help' for more information\n&#91;root@Server13 ~]# docker push 192.168.7.11\/test\/mariadb:10.5.2\nThe push refers to repository &#91;192.168.7.11\/test\/mariadb]\n2a75ca7bbb37: Preparing \nab30662e1c24: Preparing \ndfce0ddc1750: Preparing \nd0abe7e5ebab: Preparing \n2df470f82b36: Preparing \ne0b9a9a4c57f: Waiting \n78452794b5bd: Waiting \n8179bbf82947: Waiting \nfadf5ecbe4d4: Waiting \n28ba7458d04b: Waiting \n838a37a24627: Waiting \na6ebef4a95c3: Waiting \nb7f7d2967507: Waiting \nunauthorized: unauthorized to access repository: test\/mariadb, action: push: unauthorized to access repository: test\/mariadb, action: push<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u5341\u4e03\u3001\u6d4b\u8bd5\u5ba2\u6237\u673a\u4e0a\u4f20harbor\u955c\u50cf\u662f\u5426\u6210\u529f\uff1a<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-109.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"691\" height=\"246\" data-original=\"http:\/\/113.45.254.23\/wp-content\/uploads\/2025\/06\/image-109.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-1996\"  sizes=\"auto, (max-width: 691px) 100vw, 691px\" \/><\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u77e5\u8bc6\u70b9\uff1a<\/h2>\n\n\n\n<p>\u77e5\u8bc6\u70b9\uff1a<\/p>\n\n\n\n<p>\u5b9e\u9a8c\uff1a\u90e8\u7f72Docker\u955c\u50cf\u4ed3\u5e93Harbor<\/p>\n\n\n\n<p>\u524d\u63d0\uff1a<\/p>\n\n\n\n<p>1.\u5b89\u88c5\u597ddocker<\/p>\n\n\n\n<p>2.\u5b89\u88c5\u5b8cdocker compose<\/p>\n\n\n\n<p>Docker\u955c\u50cf\u4ed3\u5e93Harbor\u91cd\u8981\u7684\u77e5\u8bc6\u70b9<\/p>\n\n\n\n<p>\u4e00\u3001\u57fa\u672c\u6982\u5ff5<\/p>\n\n\n\n<p>Harbor \u662f\u4e00\u4e2a\u7528\u4e8e\u5b58\u50a8\u548c\u5206\u53d1Docker\u955c\u50cf\u7684\u4f01\u4e1a\u7ea7Registry\u670d\u52a1\u5668\u3002<\/p>\n\n\n\n<p>\u5b83\u63d0\u4f9b\u4e86\u5b89\u5168\u7684\u955c\u50cf\u5b58\u50a8\u3001\u8bbf\u95ee\u63a7\u5236\u3001\u955c\u50cf\u590d\u5236\u7b49\u529f\u80fd\u3002<\/p>\n\n\n\n<p>\u4e8c\u3001\u5173\u952e\u7279\u6027<\/p>\n\n\n\n<p>1.<\/p>\n\n\n\n<p>\u8bbf\u95ee\u63a7\u5236\uff1a<\/p>\n\n\n\n<p>\u652f\u6301\u57fa\u4e8e\u89d2\u8272\u7684\u8bbf\u95ee\u63a7\u5236\uff08RBAC\uff09\uff0c\u53ef\u4ee5\u7cbe\u7ec6\u7ba1\u7406\u7528\u6237\u6743\u9650\u3002<\/p>\n\n\n\n<p>\u63d0\u4f9b\u9879\u76ee\u7ea7\u522b\u7684\u6743\u9650\u7ba1\u7406\u3002<\/p>\n\n\n\n<p>2.<\/p>\n\n\n\n<p>\u955c\u50cf\u590d\u5236\uff1a<\/p>\n\n\n\n<p>\u652f\u6301\u8de8\u591a\u4e2aRegistry\u5b9e\u4f8b\u7684\u955c\u50cf\u540c\u6b65\uff0c\u4fbf\u4e8e\u6784\u5efa\u5206\u5e03\u5f0f\u73af\u5883\u3002<\/p>\n\n\n\n<p>\u53ef\u4ee5\u8bbe\u7f6e\u7b56\u7565\u81ea\u52a8\u540c\u6b65\u955c\u50cf\u3002<\/p>\n\n\n\n<p>3.<\/p>\n\n\n\n<p>\u5b89\u5168\u6027\uff1a<\/p>\n\n\n\n<p>\u63d0\u4f9bHTTPS\u52a0\u5bc6\u4f20\u8f93\uff0c\u786e\u4fdd\u6570\u636e\u5728\u7f51\u7edc\u4e0a\u7684\u5b89\u5168\u3002<\/p>\n\n\n\n<p>\u652f\u6301\u955c\u50cf\u7b7e\u540d\u9a8c\u8bc1\uff0c\u9632\u6b62\u955c\u50cf\u7be1\u6539\u3002<\/p>\n\n\n\n<p>4.<\/p>\n\n\n\n<p>\u5b58\u50a8\u7ba1\u7406\uff1a<\/p>\n\n\n\n<p>\u652f\u6301\u591a\u79cd\u5b58\u50a8\u540e\u7aef\uff0c\u5982\u672c\u5730\u6587\u4ef6\u7cfb\u7edf\u3001S3\u7b49\u3002<\/p>\n\n\n\n<p>\u53ef\u4ee5\u914d\u7f6e\u5b58\u50a8\u914d\u989d\uff0c\u9650\u5236\u9879\u76ee\u6216\u7528\u6237\u7684\u5b58\u50a8\u7a7a\u95f4\u3002<\/p>\n\n\n\n<p>5.<\/p>\n\n\n\n<p>\u9ad8\u53ef\u7528\u6027\uff1a<\/p>\n\n\n\n<p>\u652f\u7f72\u67b6\u6784\u652f\u6301\u9ad8\u53ef\u7528\u6027\u914d\u7f6e\uff0c\u4fdd\u8bc1\u670d\u52a1\u7684\u7a33\u5b9a\u6027\u3002<\/p>\n\n\n\n<p>\u53ef\u4ee5\u901a\u8fc7\u8d1f\u8f7d\u5747\u8861\u5668\u5206\u53d1\u8bf7\u6c42\u3002<\/p>\n\n\n\n<p>6.<\/p>\n\n\n\n<p>\u65e5\u5fd7\u4e0e\u5ba1\u8ba1\uff1a<\/p>\n\n\n\n<p>\u63d0\u4f9b\u8be6\u7ec6\u7684\u64cd\u4f5c\u65e5\u5fd7\uff0c\u4fbf\u4e8e\u76d1\u63a7\u548c\u5ba1\u8ba1\u3002<\/p>\n\n\n\n<p>\u8bb0\u5f55\u6240\u6709\u955c\u50cf\u7684\u63a8\u9001\u3001\u62c9\u53d6\u53ca\u5220\u9664\u64cd\u4f5c\u3002<\/p>\n\n\n\n<p>\u4e09\u3001\u4f7f\u7528\u573a\u666f<\/p>\n\n\n\n<p>\u4f01\u4e1a\u5185\u90e8\u90e8\u7f72\uff1a\u9002\u7528\u4e8e\u5927\u578b\u4f01\u4e1a\u5185\u90e8\u6784\u5efa\u79c1\u6709Docker Registry\u3002<\/p>\n\n\n\n<p>\u56e2\u961f\u534f\u4f5c\uff1a\u65b9\u4fbf\u56e2\u961f\u6210\u5458\u4e4b\u95f4\u5171\u4eab\u548c\u7ba1\u7406Docker\u955c\u50cf\u3002<\/p>\n\n\n\n<p>\u6301\u7eed\u96c6\u6210\/\u6301\u7eed\u90e8\u7f72\uff08CI\/CD\uff09\uff1a\u4e0eCI\/CD\u6d41\u7a0b\u96c6\u6210\uff0c\u81ea\u52a8\u5316\u955c\u50cf\u7684\u6784\u5efa\u3001\u6d4b\u8bd5\u548c\u53d1\u5e03\u3002<\/p>\n\n\n\n<p>\u56db\u3001\u90e8\u7f72\u4e0e\u914d\u7f6e<\/p>\n\n\n\n<p>Harbor\u53ef\u4ee5\u901a\u8fc7\u5b89\u88c5\u5305\u6216\u8005Helm Chart\u8fdb\u884c\u90e8\u7f72\u3002<\/p>\n\n\n\n<p>\u914d\u7f6e\u6587\u4ef6\u4e2d\u53ef\u4ee5\u8bbe\u7f6e\u5404\u79cd\u53c2\u6570\uff0c\u5982\u7aef\u53e3\u3001\u5b58\u50a8\u8def\u5f84\u3001\u8ba4\u8bc1\u65b9\u5f0f\u7b49\u3002<\/p>\n\n\n\n<p>\u4e94\u3001\u793e\u533a\u4e0e\u652f\u6301<\/p>\n\n\n\n<p>Harbor\u662fCloud Native Computing Foundation\uff08CNCF\uff09\u7684\u5b75\u5316\u9879\u76ee\uff0c\u73b0\u5df2\u6bd5\u4e1a\u6210\u4e3a\u6b63\u5f0f\u9879\u76ee\u3002<\/p>\n\n\n\n<p>\u62e5\u6709\u6d3b\u8dc3\u7684\u793e\u533a\u652f\u6301\u548c\u4e30\u5bcc\u7684\u6587\u6863\u8d44\u6e90\u3002<\/p>\n\n\n\n<p>\u901a\u8fc7\u4ee5\u4e0a\u77e5\u8bc6\u70b9\uff0c\u53ef\u4ee5\u770b\u51faHarbor\u5728Docker\u955c\u50cf\u7ba1\u7406\u65b9\u9762\u63d0\u4f9b\u4e86\u5168\u9762\u800c\u5f3a\u5927\u7684\u529f\u80fd\uff0c\u975e\u5e38\u9002\u5408\u4f01\u4e1a\u7ea7\u7684\u5e94\u7528\u573a\u666f\u3002<\/p>\n\n\n\n<p>Harbor\u7684\u8bbf\u95ee\u63a7\u5236\u662f\u5982\u4f55\u5b9e\u73b0\u7684\uff1f<\/p>\n\n\n\n<p>Harbor\u7684\u955c\u50cf\u590d\u5236\u529f\u80fd\u6709\u54ea\u4e9b\u5177\u4f53\u7684\u5e94\u7528\u573a\u666f\uff1f<\/p>\n\n\n\n<p>Harbor\u5728\u6301\u7eed\u96c6\u6210\/\u6301\u7eed\u90e8\u7f72(CI\/CD)\u6d41\u7a0b\u4e2d\u5982\u4f55\u53d1\u6325\u4f5c\u7528\uff1f<\/p>\n\n\n\n<p>\u5148\u68c0\u67e5\u670d\u52a1\u72b6\u6001\uff0c\u4ec5\u5728\u5f02\u5e38\u65f6\u91cd\u542f\uff0c\u907f\u514d\u65e0\u610f\u4e49\u64cd\u4f5c\uff1a<\/p>\n\n\n\n<p>* * * * * \/usr\/bin\/systemctl status chronyd || \/usr\/bin\/systemctl restart chronyd<\/p>\n\n\n\n<p>net.bridge.bridge-nf-call-ip6tables = 1<\/p>\n\n\n\n<p>net.bridge.bridge-nf-call-iptables = 1<\/p>\n\n\n\n<p>net.ipv4.ip_forward = 1<\/p>\n\n\n\n<p># \u542f\u7528 IPv4 \u8f6c\u53d1<\/p>\n\n\n\n<p>echo 1 &gt; \/proc\/sys\/net\/ipv4\/ip_forward<\/p>\n\n\n\n<p># \u542f\u7528\u7f51\u6865\u5bf9 IPv4 \u6570\u636e\u5305\u7684 iptables \u89c4\u5219\u5e94\u7528<\/p>\n\n\n\n<p>echo 1 &gt; \/proc\/sys\/net\/bridge\/bridge-nf-call-iptables<\/p>\n\n\n\n<p># \u542f\u7528\u7f51\u6865\u5bf9 IPv6 \u6570\u636e\u5305\u7684 ip6tables \u89c4\u5219\u5e94\u7528<\/p>\n\n\n\n<p>echo 1 &gt; \/proc\/sys\/net\/bridge\/bridge-nf-call-ip6tables<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001\u5b9e\u9a8c\u73af\u5883\uff1a \u8fd8\u539f\u81f3\uff1adocker compose\u5bb9\u5668\u7f16\u6392\uff0c\u5185\u5b588G\uff0c4\u6838CPU\uff0c\u6dfb\u52a0\u4e00\u5757100G\u786c\u76d8 \u4e8c\u3001 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[141],"tags":[149],"class_list":["post-1980","post","type-post","status-publish","format-standard","hentry","category-docker","tag-harbor"],"_links":{"self":[{"href":"http:\/\/113.45.254.23\/index.php?rest_route=\/wp\/v2\/posts\/1980","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/113.45.254.23\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/113.45.254.23\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/113.45.254.23\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/113.45.254.23\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1980"}],"version-history":[{"count":1,"href":"http:\/\/113.45.254.23\/index.php?rest_route=\/wp\/v2\/posts\/1980\/revisions"}],"predecessor-version":[{"id":1997,"href":"http:\/\/113.45.254.23\/index.php?rest_route=\/wp\/v2\/posts\/1980\/revisions\/1997"}],"wp:attachment":[{"href":"http:\/\/113.45.254.23\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1980"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/113.45.254.23\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1980"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/113.45.254.23\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1980"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}