Răsfoiți Sursa

feat(server): 优化 Docker镜像构建支持配置网络模式- 在 Docker 镜像构建过程中添加网络模式配置选项
- 在前端界面增加网络模式选择框,支持 bridge、none、container 和 host 四种模式
- 在后端代码中添加网络模式参数处理逻辑
- 更新构建配置模块,增加 dockerImagesNetworkMode 字段
- 在构建管理中添加网络模式参数传递

bwcx_jzy 2 luni în urmă
părinte
comite
eabdf7795e

+ 2 - 0
CHANGELOG-BETA.md

@@ -5,6 +5,7 @@
 ### 🐣 新增功能
 
 1. 【server】新增 数据库支持使用达梦数据库(感谢[@wxyShine](https://gitee.com/wxyShine) )
+2. 【server】新增 FTP 管理,文件查看和构建发布方式新增 FTP 支持
 
 ### 🐞 解决BUG、优化功能
 
@@ -12,6 +13,7 @@
 2. 【server】修复 终端输入命令,按Backspace 会退出终端(感谢[@dgs](https://gitee.com/dgs0924) [Gitee issues ICA57K](https://gitee.com/dromara/Jpom/issues/ICA57K) )
 3. 【server】优化 脚本日志和 SSH 命令日志支持批量删除(感谢[@lin_yeqi](https://gitee.com/lin_yeqi) [Gitee issues IBIM6W](https://gitee.com/dromara/Jpom/issues/IBIM6W) )
 4. 【server】修复 表格自定义列在部分字段不生效情况
+5. 【server】优化 构建发布方式中 Docker 镜像支持配置网络模式(感谢@酱总)
 
 ------
 

+ 4 - 0
modules/server/src/main/java/org/dromara/jpom/build/BuildExtraModule.java

@@ -153,6 +153,10 @@ public class BuildExtraModule extends BaseModel {
      * 镜像标签
      */
     private String dockerImagesLabels;
+    /**
+     * 镜像网络模式
+     */
+    private String dockerImagesNetworkMode;
     /**
      * 项目二级目录
      */

+ 1 - 0
modules/server/src/main/java/org/dromara/jpom/build/ReleaseManage.java

@@ -392,6 +392,7 @@ public class ReleaseManage {
         map.put("pull", extraModule.getDockerBuildPull());
         map.put("noCache", extraModule.getDockerNoCache());
         map.put("labels", extraModule.getDockerImagesLabels());
+        map.put("networkMode", extraModule.getDockerImagesNetworkMode());
         map.put("env", envMap);
         Consumer<String> logConsumer = logRecorder::append;
         map.put("logConsumer", logConsumer);

+ 4 - 0
modules/sub-plugin/docker-cli/src/main/java/org/dromara/jpom/DefaultDockerPluginImpl.java

@@ -374,6 +374,7 @@ public class DefaultDockerPluginImpl implements IDockerConfigPlugin {
         File baseDirectory = (File) parameter.get("baseDirectory");
         String tags = (String) parameter.get("tags");
         String buildArgs = (String) parameter.get("buildArgs");
+        String networkMode = (String) parameter.get("networkMode");
         Object pull = parameter.get("pull");
         Object noCache = parameter.get("noCache");
         String labels = (String) parameter.get("labels");
@@ -389,6 +390,9 @@ public class DefaultDockerPluginImpl implements IDockerConfigPlugin {
                 .withDockerfile(dockerfile)
                 .withBuildAuthConfigs(authConfigurations)
                 .withTags(CollUtil.newHashSet(StrUtil.splitTrim(tags, StrUtil.COMMA)));
+            if (StrUtil.isNotEmpty(networkMode)){
+                buildImageCmd.withNetworkMode(networkMode);
+            }
             // 添加构建参数
             UrlQuery query = UrlQuery.of(buildArgs, CharsetUtil.CHARSET_UTF_8);
             query.getQueryMap()

+ 30 - 2
web-vue/src/pages/build/edit.vue

@@ -748,6 +748,34 @@
                     </a-col>
                   </a-row>
                 </a-form-item>
+                <a-form-item :label="$t('i18n_7ddbe15c84')">
+                  <a-auto-complete
+                    v-model:value="tempExtraData.dockerImagesNetworkMode"
+                    :placeholder="$t('i18n_abd9ee868a')"
+                    :options="[
+                      {
+                        title: $t('i18n_c36ab9a223'),
+                        value: 'bridge'
+                      },
+                      {
+                        title: $t('i18n_3d6acaa5ca'),
+                        value: 'none'
+                      },
+                      {
+                        title: $t('i18n_fcaef5b17a'),
+                        value: 'container:<name|id>'
+                      },
+                      {
+                        title: $t('i18n_ff39c45fbc'),
+                        value: 'host'
+                      }
+                    ]"
+                  >
+                    <template #option="item">
+                      {{ item.title }}
+                    </template>
+                  </a-auto-complete>
+                </a-form-item>
                 <a-form-item name="swarmId">
                   <template #label>
                     <a-tooltip>
@@ -1333,8 +1361,8 @@
           chooseScriptVisible === 1
             ? tempExtraData.noticeScriptId
             : temp.script?.indexOf('$ref.script.') != -1
-            ? temp.script.replace('$ref.script.', '')
-            : ''
+              ? temp.script.replace('$ref.script.', '')
+              : ''
         "
         mode="choose"
         @confirm="