Kaynağa Gözat

HostConfig 添加一个 init 字段, 对应 docker run 命令中的 --init 参数, 该参数为容器引入了一个初始进程, 用于管理信号和孤儿进程,避免出现僵尸进程和信号处理问题

reghao 8 ay önce
ebeveyn
işleme
e9d67e5a51

+ 8 - 1
common/src/main/java/cn/reghao/devops/common/docker/DockerImpl.java

@@ -198,9 +198,12 @@ public class DockerImpl implements Docker {
             createContainerCmd.withEnv(env);
         }
 
+        RestartPolicy restartPolicy = RestartPolicy.onFailureRestart(3);
         HostConfig hostConfig = HostConfig.newHostConfig()
+                // --init 参数
+                //.withInit(true)
                 .withNetworkMode("host")
-                .withRestartPolicy(RestartPolicy.unlessStoppedRestart());
+                .withRestartPolicy(restartPolicy);
         if (containerConfig.getVolumes() != null) {
             Map<String, String> map = containerConfig.getVolumes().getMap();
             List<Bind> list = new ArrayList<>();
@@ -214,6 +217,10 @@ public class DockerImpl implements Docker {
             hostConfig.withBinds(list);
         }
 
+        if (containerConfig.getHostConfig().getInit() != null) {
+            hostConfig.withInit(containerConfig.getHostConfig().getInit());
+        }
+
         createContainerCmd.withHostConfig(hostConfig);
         CreateContainerResponse response = createContainerCmd.exec();
         String containerId = response.getId();

+ 4 - 0
common/src/main/java/cn/reghao/devops/common/docker/model/Config.java

@@ -39,6 +39,10 @@ public class Config implements Cloneable {
     @SerializedName("HostConfig") private HostConfig hostConfig;
     @SerializedName("NetworkingConfig") private NetworkingConfig networkingConfig;
 
+    public Config() {
+        this.hostConfig = new HostConfig();
+    }
+
     public Config(String image) {
         this.image = image;
         this.hostConfig = new HostConfig();

+ 1 - 0
common/src/main/java/cn/reghao/devops/common/docker/model/HostConfig.java

@@ -15,6 +15,7 @@ import lombok.Data;
 public class HostConfig {
     @SerializedName("NetworkMode") private String networkMode;
     @SerializedName("RestartPolicy") private RestartPolicy restartPolicy;
+    @SerializedName("Init") private Boolean init;
 
     public HostConfig() {
         this.networkMode = "host";