当前位置: 首页 > news >正文

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

一、环境准备: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 <name>
[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.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.5</version><relativePath/></parent><groupId>com.example</groupId><artifactId>java-demo</artifactId><version>1.0-SNAPSHOT</version><properties><java.version>11</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

        创建 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 allocatedRun '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.dtcms.com/a/418225.html

相关文章:

  • 【qml-12】Quick3D实现机器人鼠标拖拽转换视角(无限角度)与滚轮缩放
  • h5实现一个吸附在键盘上的工具栏
  • 解决 sqlplus / as sysdba 登录缓慢问题
  • Mysql DBA学习笔记(主从复制)
  • 网站开发的交付文档企业策划是什么意思
  • 个人网站主机选择上海品牌全案设计公司
  • 布谷娱乐直播系统源码开发实用功能:技术驱动更迭的创新体验
  • ArcGIS JSAPI 高级教程 - 高亮效果优化之开启使用多高亮样式
  • 元宇宙的搜索引擎:如何在虚拟世界中查找信息
  • Unity-AB包
  • Rust开发环境配置
  • 【mdBook】5.2.1 通用配置
  • Rust自定义函数引用
  • Java 集合体系 —— List 篇
  • 操作系统应用开发(十一)RustDesk在线编译自己客户端——东方仙盟筑基期
  • 【mdBook】5.2 配置
  • 网站建设难么让网站快速收录
  • h5游戏网站建设游戏软件开发培训学校
  • 扩散模型-图像编辑【An Edit Friendly DDPM Noise Space: Inversion and Manipulations】
  • 开源 C# 快速开发(九)通讯--Tcp客户端
  • 大黄蜂云课堂vep格式加密视频录屏截图翻录转换为mp4
  • 【Python办公】批量图片转PDF工具
  • Python爬虫实战:获取北京市交管局最新车检信息与数据分析
  • ubuntu24.04 实现DLNA音频推送
  • 企业网站的建设规划网站建站前期准备工作
  • Docker搭建ESPIDF环境,程序下载
  • MQTT-物联网轻量级通信
  • eclipse复制项目后原项目名依然伴随值所复制的项目名
  • 微服务架构:从单机到分布式的革命性升级
  • 【ROS2学习笔记】话题通信篇:python话题订阅与发布