通过配置 GitLab 自动触发项目自动化构建与部署 - 指南

news/2025/10/1 12:32:36/文章来源:https://www.cnblogs.com/wzzkaifa/p/19122342

一、环境准备:Docker、Jenkins、GitLab 部署(国内镜像加速)

        1.Docker 国内镜像源配置

        确保 Docker 拉取镜像时走国内加速,编辑 /etc/docker/daemon.json

[root@host1 ~]# vi /etc/docker/daemon.json
[root@host1 ~]# cat /etc/docker/daemon.json
{"registry-mirrors": ["https://9fbd5949cbc94e4a9581e33b9077c811.mirror.swr.myhuaweicloud.com","https://jnh8ca4k.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn","https://docker.mirror.aliyuncs.com","https://reg-mirror.qiniu.com","https://f1361db2.m.daocloud.io","https://hub-mirror.c.163.com"],"insecure-registries": ["192.168.197.9:5001"],"live-restore": true
}
重启 Docker 使配置生效:
[root@host1 ~]# systemctl daemon-reload
[root@host1 ~]# systemctl restart docker
[root@host1 ~]#

        2.启动 GitLab(国内镜像版,支持中文)

        使用国内维护的 twang2218/gitlab-ce-zh 镜像(中文社区版,拉取更快),并映射端口 / 持久化数据:

# 创建数据持久化目录
[root@host1 ~]# mkdir -p /srv/gitlab/{config,logs,data}
# 启动 GitLab 容器(HTTP 用 8081 端口,避免与 Jenkins 冲突)
[root@host1 ~]# docker run -d \--name gitlab \-p 8443:443 -p 8081:80 -p 2222:22 \-v /srv/gitlab/config:/etc/gitlab \-v /srv/gitlab/logs:/var/log/gitlab \-v /srv/gitlab/data:/var/opt/gitlab \twang2218/gitlab-ce-zh:latest
Unable to find image 'twang2218/gitlab-ce-zh:latest' locally
latest: Pulling from twang2218/gitlab-ce-zh
8ee29e426c26: Pull complete
6e83b260b73b: Pull complete
e26b65fd1143: Pull complete
40dca07f8222: Pull complete
b420ae9e10b3: Pull complete
a218309dd589: Pull complete
5c60fd7ba0ce: Pull complete
659c2144b5a3: Pull complete
8289bbac0d0e: Pull complete
31bbd150e8a7: Pull complete
9114e78243fa: Pull complete
e242e5cd1314: Pull complete
0a079dc3f92c: Pull complete
f0e195b09fd2: Pull complete
6e23346e2f58: Pull complete
91f00659be69: Pull complete
a1031bcc5b2c: Pull complete
e3074327c7b1: Pull complete
a917618dbe42: Pull complete
Digest: sha256:62686b74c6fca5ece8ed582d03a126c5988423dd8a19ce70e9a22357ffcaf1c8
Status: Downloaded newer image for twang2218/gitlab-ce-zh:latest
31cf4cf2bc3f76978e0ced18465a3c7197de6e5f74c852ddf5d76d7549dbe5af

        3.启动 Jenkins(国内加速拉取官方镜像)

        使用 jenkins/jenkins:lts(长期支持版),通过国内镜像源加速拉取:

# 创建 Jenkins 数据持久化目录
[root@host1 ~]# mkdir -p /srv/jenkins_home
[root@host1 ~]# chown -R 1000:1000 /srv/jenkins_home    # Jenkins 容器内用户为 uid=1000
# 启动 Jenkins 容器(映射 8080 端口)
[root@host1 ~]# docker run -d \--name jenkins \-p 8080:8080 -p 50000:50000 \-v /srv/jenkins_home:/var/jenkins_home \jenkins/jenkins:lts
Unable to find image 'jenkins/jenkins:lts' locally
lts: Pulling from jenkins/jenkins
8fb375ec14f3: Pull complete
c7acc196d9db: Pull complete
c9a178fb1e40: Pull complete
59c3eb56f065: Pull complete
5ad06dc8d2bc: Pull complete
5fe83599b627: Pull complete
1d17e189ff23: Pull complete
18238f4d9e48: Pull complete
7c1a19381ac9: Pull complete
195624e01063: Pull complete
e4441ae29535: Pull complete
4f19f207bd6e: Pull complete
Digest: sha256:ace160331258aeff24581038e63ec5b5e8e969cebc9582a5ac7f0ed9fd20043b
Status: Downloaded newer image for jenkins/jenkins:lts
6ab5e11b7982d6a476dd4b3ce8ccb9c8bf2cbeeb5fcddfe15ccfded8e07fc81f

二、Jenkins 配置:项目、触发器、插件

        1.初始化 Jenkins   

        (详细过程请查看 部署 Jenkins 服务器-CSDN博客)

  • 访问 http://<宿主机IP>:8080(如 http://192.168.197.9:8082)。

  • 首次启动需获取初始密码:

[root@host1 ~]# docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
312dd6142d0b4e2ab0fb590782a85af9
  • 输入密码后,选择「安装推荐插件」,等待插件安装完成,创建管理员用户。

        2.安装必要插件

        进入「系统管理」→「插件管理」→「可选插件」,搜索并安装:

  • Git Plugin(Git 源码管理支持)
  • GitLab Plugin(GitLab 触发与认证支持)
  • Pipeline Plugin(流水线支持,可选,若用 Pipeline 语法)

        3.配置 GitLab 凭据

        进入「凭据」→「系统」→「全局凭据」→「添加凭据」:

  • 类型选「GitLab API 令牌」。
  • 前往 GitLab(http://<宿主机IP>:8081),点击「个人头像」→「设置」→「访问令牌」,创建令牌(勾选 api 权限),复制令牌内容。
  • 在 Jenkins 凭据中,「API 令牌」填写刚复制的内容,「ID」自定义(如 gitlab-token),保存。

        4.创建 Jenkins 项目(以 Maven 项目为例)

  • 点击「新建 Item」→ 选择「构建一个 Maven 项目」→ 输入项目名(如 java-demo)→ 确定。

  • 源码管理
    • 选「Git」,填写 GitLab 仓库地址(如 http://<宿主机IP>:8081/<用户名>/java-demo.git,需先在 GitLab 创建空项目)。
    • 「凭据」选择刚配置的 GitLab 令牌。
  • 构建触发器
    • 勾选「Build when a change is pushed to GitLab.」。
    • 点击「高级」→ 点击「Generate」生成 Secret token(复制该 token,后续 GitLab Webhook 会用到)。
  • 构建
    • 「Goals and options」填写 clean package -DskipTests(Maven 打包命令,跳过测试)。
  • 构建后操作(示例:Docker 构建并启动服务):
    • 点击「添加构建后操作步骤」→ 选「执行 Shell」,输入:
# 构建 Docker 镜像
docker build -t java-demo:latest .
# 停止并删除旧容器(若存在)
docker stop java-demo || true
docker rm java-demo || true
# 启动新容器(映射 8082 端口)
docker run -d -p 8082:8080 --name java-demo java-demo:latest

三、GitLab 配置:项目、Webhook

        1.初始化 GitLab

  • 访问 http://<宿主机IP>:8081(如 http://192.168.197.9:8081)。
  • 首次登录用 root 账户,密码在 /srv/gitlab/config/initial_root_password(容器内执行 cat /srv/gitlab/config/initial_root_password)。
  • 创建用户(如 demo),创建项目(如 java-demo)。

        2.配置 Webhook(实现 Git 推送触发 Jenkins 构建)

  • 进入 GitLab 项目 →「设置」→「Webhooks」。
  • URL:填写 Jenkins 项目的触发地址,格式为 http://<Jenkins宿主机IP>:8080/project/<Jenkins项目名>(如 http://192.168.197.9:8080/project/java-demo)。
  • Secret token:填写 Jenkins 中生成的 Secret token。
  • Trigger:勾选「Push events」(推送代码时触发)。
  • (可选)若提示「URL is blocked: Requests to the local network are not allowed」:
    • 进入 GitLab 「管理区域」→「设置」→「网络」→ 勾选「Allow requests to the local network from web hooks and services」→ 保存。

四、测试:代码推送 → 自动构建 → 验证服务

        1.本地克隆 GitLab 仓库

[root@host1 ~]# git clone http://192.168.197.9:8081/root/java-demo.git
bash: git: 未找到命令...
安装软件包“git-core”以提供命令“git”? [N/y] y* 正在队列中等待...* 正在载入软件包列表。...
下列软件包必须安装:git-core-2.47.3-1.el9.x86_64Core package of git with minimal functionality
继续更改? [N/y] y* 正在队列中等待...* 正在等待认证...* 正在队列中等待...* 正在下载软件包...* 正在请求数据...* 正在测试更改...* 正在安装软件包...
正克隆到 'java-demo'...
Username for 'http://192.168.197.9:8081': cd java-demo
Password for 'http://cd%20java-demo@192.168.197.9:8081':
remote: HTTP Basic: Access denied
致命错误:'http://192.168.197.9:8081/root/java-demo.git/' 鉴权失败
[root@host1 ~]# git clone http://192.168.197.9:8081/root/java-demo.git
正克隆到 'java-demo'...
Username for 'http://192.168.197.9:8081': root
Password for 'http://root@192.168.197.9:8081':
警告:您似乎克隆了一个空仓库。
提示: 使用 'master' 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中
提示: 配置使用初始分支名,并消除这条警告,请执行:
提示:
提示: git config --global init.defaultBranch <名称>
提示:
提示: 除了 'master' 之外,通常选定的名字有 'main'、'trunk' 和 'development'。
提示: 可以通过以下命令重命名刚创建的分支:
提示:
提示: git branch -m 
[root@host1 ~]#

        2.添加测试代码(Spring Boot 示例)

        创建 src/main/java/com/example/HelloController.java

[root@host1 java-demo]# vi src/main/java/com/example/HelloController.java
[root@host1 java-demo]# cat src/main/java/com/example/HelloController.java
package com.example;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {@GetMapping("/")public String hello() {return "Hello from Jenkins Auto-Build!";}
}

        创建 pom.xml(Maven 配置,简化版):

[root@host1 ~]# cd java-demo
[root@host1 java-demo]# vi pom.xml
[root@host1 java-demo]# cat pom.xml4.0.0org.springframework.bootspring-boot-starter-parent2.7.5com.examplejava-demo1.0-SNAPSHOT11org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-maven-plugin

        创建 src/main/resources/application.properties(空文件即可,或配置端口):

[root@host1 java-demo]# vi src/main/resources/application.properties
[root@host1 java-demo]# cat src/main/resources/application.properties
server.port=8081

        创建 Dockerfile(与 pom.xml 同目录):

[root@host1 java-demo]# vi Dockerfile
[root@host1 java-demo]# cat Dockerfile
FROM openjdk:11-jre-slim
COPY target/java-demo-1.0-SNAPSHOT.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

        3.提交并推送到 GitLab

[root@host1 java-demo]# git add .
[root@host1 java-demo]# git commit -m "autobuild commit"
作者身份未知
*** 请告诉我您是谁。
运行git config --global user.email "you@example.com"git config --global user.name "Your Name"
来设置您账号的缺省身份标识。
如果仅在本仓库设置身份标识,则省略 --global 参数。
致命错误:无法自动探测邮件地址(得到 'root@host1.(none)')
[root@host1 java-demo]# git config --global user.name "songjialin"
[root@host1 java-demo]# git config --global user.email "2243678135@qq.com"
[root@host1 java-demo]# git commit -m "autobuild commit"
[master(根提交) 1cf41b9] autobuild commit5 files changed, 64 insertions(+)create mode 100644 Dockerfilecreate mode 100644 pom.xmlcreate mode 100644 src/main/java/com/example/DemoApplication.javacreate mode 100644 src/main/java/com/example/HelloController.javacreate mode 100644 src/main/resources/application.properties
[root@host1 java-demo]# git push origin main
错误:源引用规格 main 没有匹配
错误:无法推送一些引用到 'http://192.168.197.9:8081/root/java-demo.git'
[root@host1 java-demo]# git push -u origin master:main
Username for 'http://192.168.197.9:8081': root
Password for 'http://root@192.168.197.9:8081':
枚举对象中: 13, 完成.
对象计数中: 100% (13/13), 完成.
使用 8 个线程进行压缩
压缩对象中: 100% (9/9), 完成.
写入对象中: 100% (13/13), 1.50 KiB | 383.00 KiB/s, 完成.
总共 13(差异 0),复用 0(差异 0),包复用 0(来自  0 个包)
To http://192.168.197.9:8081/root/java-demo.git* [new branch]      master -> main
分支 'master' 设置为跟踪 'origin/main'。
[root@host1 java-demo]# git remote -v
originhttp://192.168.197.9:8081/root/java-demo.git (fetch)
originhttp://192.168.197.9:8081/root/java-demo.git (push)
[root@host1 java-demo]# git remote set-url origin ssh://git@192.168.197.9:2222/root/java-demo.git
[root@host1 java-demo]# git push -u origin master:main
The authenticity of host '[192.168.197.9]:2222 ([192.168.197.9]:2222)' can't be established.
ED25519 key fingerprint is SHA256:CwSJ9sjDkkGSrR9pK/BSI97UiktySR3gfVdHxfV63o8.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[192.168.197.9]:2222' (ED25519) to the list of known hosts.
git@192.168.197.9: Permission denied (publickey).
致命错误:无法读取远程仓库。
请确认您有正确的访问权限并且仓库存在。
[root@host1 java-demo]# eval "$(ssh-agent -s)"
Agent pid 3117392
[root@host1 java-demo]# ssh-add ~/.ssh/id_rsa
Identity added: /root/.ssh/id_rsa (2243678135@qq.com)
[root@host1 java-demo]# cat /root/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----
[root@host1 java-demo]# ssh-keygen -t rsa -b 4096 -C "2243678135@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)?
[root@host1 java-demo]# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDeVIaBQNrAgbHGjIbaalvK4mSyr2GhyxzharvtGtq7qwi1tfbsE2cDdvfWOV/ZBONfpjBkLPU1WR0VOU3jRURVQwANC4KEwLNmTGThN2AbshOzwwwnLW6amzaieynjQcV3y6mS7JDO17pX/pugxdqgiKFFpNbMKyIcMg13iQVO1rOxcGPRfFBLCdgdpHzPkA1JTyRoYufumQNwXv84zCih2S0k5ys4NfkwfRyDdr5u8SXRTwDD7U6HSrh31ozXPPAvIFKFbsBiX60XSqPmSFAC/eehcBaJNKxLpctsUj5jNnyBtgfTDxvgGRx9GY0ZTGtt3pmL8UNgmvSbRG5kHJTdvBlWOdfpvQCvsyHnPkYWiF/EA0ElbHYWiOm6pdkPMRqi3JoCZtSVanFVHcKZkPI+3j1+ivO/2lAwEqrYbVZ9yMdvL4ZEy6Syh3VIxtE5iVZl4COYQGtS2BBAEtbi9UoyN4p6yntzchf6WeLQAJuU5G0f7J7Ar7eIbZJK7Fmb/Ioqwe7HaRe6UoErMk7viSFHunLK90p1gpw6jB+zWH+XWkyrMyIUzvR5/rBetoJgr6BouBmTEaWMkqaK0FBfZgWfTgBuPtPzP3i2e1m1RNMkrIendf6tDZ9hlYgoWhMu0TRs1ThKDPKSp6cwpixjGDLtmMxW9+7vuT3asVYF7xjyrw== 2243678135@qq.com
[root@host1 java-demo]# eval "$(ssh-agent -s)"
Agent pid 3152619
[root@host1 java-demo]# ssh-add ~/.ssh/id_rsa
Identity added: /root/.ssh/id_rsa (2243678135@qq.com)
[root@host1 java-demo]# git push -u origin master:main
分支 'master' 设置为跟踪 'origin/main'。
Everything up-to-date
[root@host1 java-demo]#

        4.验证自动构建与服务

  • 切换到 Jenkins 界面,观察项目是否自动触发构建(构建历史会新增,状态为 “正在构建” 或 “成功”)。
  • 构建完成后,访问 Docker 宿主机的 8082 端口(如 http://<宿主机IP>:8082),应看到:
[root@host1 java-demo]# curl http://192.168.197.9:8082
Hello! Please test autobuild!

五、关键说明

  • 所有镜像均通过国内镜像源加速(Docker 配置了阿里云 / 网易源,GitLab 使用国内社区镜像),避免外网拉取超时。
  • 端口、路径可根据实际环境调整(如 GitLab 端口、Jenkins 项目名、Docker 映射端口等)。
  • 若需更复杂的部署(如 Kubernetes),可将 “构建后操作” 替换为 Kubectl 命令或 Helm 部署,核心触发逻辑(Webhook + Jenkins 触发器)保持一致。

!!!部分问题解决:

[root@host1 ~]# vi /etc/docker/daemon.json
[root@host1 ~]# cat /etc/docker/daemon.json
{"registry-mirrors": ["https://9fbd5949cbc94e4a9581e33b9077c811.mirror.swr.myhuaweicloud.com","https://jnh8ca4k.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn","https://docker.mirror.aliyuncs.com","https://reg-mirror.qiniu.com","https://f1361db2.m.daocloud.io","https://hub-mirror.c.163.com"],"insecure-registries": ["192.168.197.9:5001"],"live-restore": true
}
[root@host1 ~]# systemctl daemon-reload
[root@host1 ~]# systemctl restart docker
[root@host1 ~]# mkdir -p /srv/gitlab/{config,logs,data}
[root@host1 ~]# docker run -d \--name gitlab \-p 8443:443 -p 8081:80 -p 2222:22 \-v /srv/gitlab/config:/etc/gitlab \-v /srv/gitlab/logs:/var/log/gitlab \-v /srv/gitlab/data:/var/opt/gitlab \twang2218/gitlab-ce-zh:latest
Unable to find image 'twang2218/gitlab-ce-zh:latest' locally
latest: Pulling from twang2218/gitlab-ce-zh
8ee29e426c26: Pull complete
6e83b260b73b: Pull complete
e26b65fd1143: Pull complete
40dca07f8222: Pull complete
b420ae9e10b3: Pull complete
a218309dd589: Pull complete
5c60fd7ba0ce: Pull complete
659c2144b5a3: Pull complete
8289bbac0d0e: Pull complete
31bbd150e8a7: Pull complete
9114e78243fa: Pull complete
e242e5cd1314: Pull complete
0a079dc3f92c: Pull complete
f0e195b09fd2: Pull complete
6e23346e2f58: Pull complete
91f00659be69: Pull complete
a1031bcc5b2c: Pull complete
e3074327c7b1: Pull complete
a917618dbe42: Pull complete
Digest: sha256:62686b74c6fca5ece8ed582d03a126c5988423dd8a19ce70e9a22357ffcaf1c8
Status: Downloaded newer image for twang2218/gitlab-ce-zh:latest
01c614a3a5df9d5d0f0dd577a9abc90157c5b44247a91dcc143682ee90d94199
[root@host1 ~]# mkdir -p /srv/jenkins_home
[root@host1 ~]# chown -R 1000:1000 /srv/jenkins_home
[root@host1 ~]# docker run -d \--name jenkins \-p 8080:8080 -p 50000:50000 \-v /srv/jenkins_home:/var/jenkins_home \jenkins/jenkins:lts
Unable to find image 'jenkins/jenkins:lts' locally
lts: Pulling from jenkins/jenkins
8fb375ec14f3: Pull complete
c7acc196d9db: Pull complete
c9a178fb1e40: Pull complete
59c3eb56f065: Pull complete
5ad06dc8d2bc: Pull complete
5fe83599b627: Pull complete
1d17e189ff23: Pull complete
18238f4d9e48: Pull complete
7c1a19381ac9: Pull complete
195624e01063: Pull complete
e4441ae29535: Pull complete
4f19f207bd6e: Pull complete
Digest: sha256:ace160331258aeff24581038e63ec5b5e8e969cebc9582a5ac7f0ed9fd20043b
Status: Downloaded newer image for jenkins/jenkins:lts
73066802d42272804857beb88f6d12f112159e200259e90cf413484c38dd7cb4
docker: Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint jenkins (9a0c45812ee24a4f07e7b939e665b6131090a589c9b2698c9ea93cc8e1630fcd): Bind for 0.0.0.0:8080 failed: port is already allocated
Run 'docker run --help' for more information
[root@host1 ~]# docker run -d \--name jenkins \-p 8082:8080 -p 50000:50000 \-v /srv/jenkins_home:/var/jenkins_home \jenkins/jenkins:lts
docker: Error response from daemon: Conflict. The container name "/jenkins" is already in use by container "73066802d42272804857beb88f6d12f112159e200259e90cf413484c38dd7cb4". You have to remove (or rename) that container to be able to reuse that name.
Run 'docker run --help' for more information
[root@host1 ~]# ss -tulnp | grep 8080
tcp   LISTEN 0      4096         0.0.0.0:8080       0.0.0.0:*    users:(("docker-proxy",pid=1958114,fd=7))
tcp   LISTEN 0      4096            [::]:8080          [::]:*    users:(("docker-proxy",pid=1958120,fd=7))
#端口冲突
[root@host1 ~]# docker rm 73066802d42272804857beb88f6d12f112159e200259e90cf413484c38dd7cb4
73066802d42272804857beb88f6d12f112159e200259e90cf413484c38dd7cb4
[root@host1 ~]# docker run -d \--name jenkins \-p 8082:8080 -p 50000:50000 \-v /srv/jenkins_home:/var/jenkins_home \jenkins/jenkins:lts
bfcf9f0568e58bef7fa1c13ed4b96fbcde1090754956974008d8f1e2eb8e1129
[root@host1 ~]# docker ps
CONTAINER ID   IMAGE                           COMMAND                   CREATED         STATUS                            PORTS                                                                                                                         NAMES
bfcf9f0568e5   jenkins/jenkins:lts             "/usr/bin/tini -- /u…"   8 seconds ago   Up 8 seconds                      0.0.0.0:50000->50000/tcp, [::]:50000->50000/tcp, 0.0.0.0:8082->8080/tcp, [::]:8082->8080/tcp                                  jenkins
01c614a3a5df   twang2218/gitlab-ce-zh:latest   "/assets/wrapper"         4 minutes ago   Up 3 minutes (health: starting)   0.0.0.0:2222->22/tcp, [::]:2222->22/tcp, 0.0.0.0:8081->80/tcp, [::]:8081->80/tcp, 0.0.0.0:8443->443/tcp, [::]:8443->443/tcp   gitlab
fc0fa6e6a67f   flask-postgres-server           "python -m flask run…"   4 days ago      Up 4 days                         0.0.0.0:8000->5000/tcp, [::]:8000->5000/tcp                                                                                   flask-postgres-server-1
89fbcc882a92   postgres                        "docker-entrypoint.s…"   4 days ago      Up 4 days (healthy)               5432/tcp                                                                                                                      flask-postgres-db-1
df239b1a3777   tomcat:9-jdk11                  "catalina.sh run"         6 days ago      Up 4 days                         0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp                                                                                   tomcat-server
59abedaf927d   mysql:8.0                       "docker-entrypoint.s…"   6 days ago      Up 4 days                         3306/tcp, 33060/tcp                                                                                                           tomcat-mysql-db
44276a42a93e   nodejs-mongo-app                "docker-entrypoint.s…"   7 days ago      Up 4 days                         0.0.0.0:3000->3000/tcp, [::]:3000->3000/tcp                                                                                   node-mongo
64a1679ebb2c   mongo:7.0                       "docker-entrypoint.s…"   7 days ago      Up 4 days                         0.0.0.0:27017->27017/tcp, [::]:27017->27017/tcp                                                                               mongo
0dbf7ea2178e   registry                        "/entrypoint.sh /etc…"   2 weeks ago     Up 4 days                         0.0.0.0:5000->5000/tcp, [::]:5000->5000/tcp                                                                                   myregistry

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双网卡服务器校园网访问故障排查与解决​ - 教程

双网卡服务器校园网访问故障排查与解决​ - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

黄页网站建设建筑公司网站封面图片

1、下载vscode 官网地址:https://code.visualstudio.com/ 针对ubuntu点击下载deb安装包,默认下载地址如下,下载速度很慢,而且会下载失败,解决方法如下: 将“https://az764295.vo.msecnd.net”改为“https://vscode.cdn.azure.cn”后,下载会很快。 例如,将: https:…

怎么实现网站建设报价方案手机免费在线搭建网站

一页有三栏&#xff1a;主栏、副栏、思考栏。主栏主要是在右上角&#xff0c;主要记录学到的内容。副栏在左边&#xff0c;主要是简单概括重点。思考栏在底部&#xff0c;主要是记录收获、感悟。 主栏&#xff1a;在听讲或阅读时把重要的内容或知识的要点记录在右侧的区域&…

详述网站建设的过程简答题二次元网站开发的意义

SPI相关基础知识 SPI基本概念请自行百度&#xff0c;参考&#xff1a;百度百科SPI简介.我们讲重点和要注意的地方。 master模式下要关注的地方 接线一一对应 也就是说主控的MISO,MOSI,SCLK,[CSn]分别和设备的MISO,MOSI,SCLK,[CSn]一一对应相连&#xff0c;不交叉&#xff0…

US$9.99 Cheap Galletto 1260 ECU Chip Tuning Interface EOBD Tuning Tools

Galletto 1260 ECU Chip Tuning Interface With Multi LanguagesTop 4 Reasons to Get Galletto 12601. Supported Languages: English, Spanish, French, German, Italian, Portuguese2. EOBD2 Flasher 1260 is an ea…

万网主机怎么上传网站吗网站建设的简历制作

在我之前的文章 “Elasticsearch&#xff1a;对 Java 对象的 ES|QL 查询”&#xff0c;我详细介绍了如何使用 Java 来对 ES|QL 进行查询。对于不是很熟悉 Elasticsearch 的开发者来说&#xff0c;那篇文章里的例子还是不能单独来进行运行。在今天的这篇文章中&#xff0c;我来详…

房产网站模板程序在线oa

内容摘要 我国推动的工业互联网是更加广义的工业互联网&#xff0c;不仅包括设备的联网。其核心是提升我国工业能力和工业水平&#xff0c;是我国制造业转型升级的重要推手和抓手。我们把工业互联网分为六个层级&#xff0c;包括设备层、网络层、平台层、软件层、应用层和安全…

US$9 TF Card 4GB Flash Memory Card Can Work on Ksuite

TF Card 4GB Flash Memory Card Can Work on KsuitePackage List:1pc x 4GB TF Card Pictures of TF Card 4GB Flash Memory Card Can Work on KsuiteTF Card 4GB Flash Memory Card Can Work on Ksuite, now only nee…

详细介绍:MySQL备份策略核心知识点总结

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

新手学网站建设视频教程共30课高清版2狠狠做网站

题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 …

input() 函数

格式: 变量 = input("提示信息:")用户输入的任何内容,都将被 Python 识别为字符串。

Playwright MCP 的使用与调试技巧

摘要 本文将详细介绍 Playwright MCP 的使用方法、常见问题及解决方案,特别针对中国开发者,尤其是 AI 应用开发者。文章通过实践案例、代码示例、架构图、流程图等多种形式,帮助读者快速掌握 Playwright MCP 的核心…

什么网站建设效果好泰安最新通告今天

文章目录 一.基本介绍二.性能指标三.下载安装JMeter1.下载安装包2.启动JMeter 四.使用JMeter1.模拟用户请求2.填写测试地址3.接收测试结果4.结果解释 一.基本介绍 压力测试考察当前软硬件条件下系统所能承受的最大负荷并找到系统瓶颈所在。压测是为了系统在线上的处理能力和稳定…

网站运行速度慢中铁建设集团有限公司官方网站

摘要 本文使用2024年最新的ELA注意力机制改进YoloV8的Neck层,实现涨点!改进方式简单易用,涨点明显!欢迎大家使用。 大家在订阅专栏后,记着加QQ群啊!有些改进方法确实有难度,大家在改进的过程中遇到问题,我会解答和指导! 论文:《ELA:深度卷积神经网络的高效局部注意…

公司网站开发的工作内容链接买卖价格

php fgets()函数从文件指针读取一行语法:fgets(file,length)参数说明必需的. 指定姚要读取的文件长度可选. 指定姚都区的字节数. 默认值为102字节从文件所指向的文件中读取一行&#xff0c;并返回最大长度为1个字节的字符串. 遇到换行符(包含在返回值中&#xff0c;)&#xff0…

自适应网站教程wordpress ie兼容

🏡《总目录》 目录 1,概述2,工作原理2.1,材料特性2.2,温度升高2.3,温度降低2.4,数学模型3,结构特点3.1,磁芯3.2,线圈3.3,骨架3.4,绝缘材料4,工艺流程4.1,材料准

网站开发与维护专员岗位职责单页面seo优化

早晨:准备与启动 6:00 AM - 系统启动 自动化仓储系统在清晨开始启动,操作员检查各项系统和设备的状态,确保所有机器人、传送带和扫描设备都正常运行。仓储管理系统(WMS)加载当天的订单数据,准备开始处理。 6:30 AM - 早班员工到达 早班员工到达仓库,换上工作服和安全装…

怎么才能让自己做的网站上传到百度搜关键字可以搜到网页版微信二维码不出来

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 ZooKeeper初探&#xff1a;分布式世界的守护者 前言Zookeeper的概述分布式系统中的角色和作用&#xff1a; Zookeeper的数据模型Znode的概念和层次结构&#xff1a;Znode的类型和应用场景&#xff1a;…

做网站公司 备案郑州市多商家网站制作公司

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【youcans 的 OpenCV 例程 200 篇】117. 形态学操作之顶帽运算 形态学的基本思想是利用结构元素测量或提取输入图像中的形状或特征&…