首页 > 解决方案 > Springboot应用更新后,无法拉取镜像

问题描述

我用的是两台虚拟机,安装的是centos 7。主机是win10专业版。

我按照链接制作了由 kubernetes 管理的 spring boot 应用程序容器。该链接使用 minikube,但我使用两个节点作为 kubernetes 最小安装。一个节点是master(172.16.100.81),一个节点是worker(172.16.100.96)。使用 hello 应用程序,我按照步骤操作,它可以工作。我的命令简介如下:

docker build -t $USER/hello:0.0.1 .
kubectl run hello --image $USER/hello:0.0.1 --port 8080
kubectl expose deployment hello --type=NodePort

到目前为止一切都很好。我什至可以将其扩展到replica=3。

但是现在我修改了spring boot应用程序,我只是添加了几个字符如下:

package com.springdeveloper.k8s.hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@SpringBootApplication
public class HelloApplication {

        public static void main(String[] args) {
                SpringApplication.run(HelloApplication.class, args);
        }

        @RestController
        class HelloController {
                @GetMapping("/hello")
                String hello() {
                        return "Hello Kubernauts!, are there image transfer?";
                }
        }


}

通过此更改,我还更改了 Dockerfile,使其不会与以前的版本发生冲突。修改后的Dockerfile如下:

FROM registry.docker-cn.com/library/openjdk:8-alpine
VOLUME /tmp
ADD ./target/hello-0.0.1-SNAPSHOT.jar /hello2.jar
RUN sh -c 'touch /hello2.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","q/hello2.jar"]

原Dockerfile如下:

FROM registry.docker-cn.com/library/openjdk:8-alpine
VOLUME /tmp
ADD ./target/hello-0.0.1-SNAPSHOT.jar /hello.jar
RUN sh -c 'touch /hello.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/hello.jar"]

然后我执行与以前相同的步骤:

docker build -t $USER/hello2:0.0.2 .
kubectl run hello2 --image $USER/hello2:0.0.2 --port 8081
kubectl expose deployment hello2 --type=NodePort

但是 hello2 不能处于就绪状态,而 hello 处于就绪状态。我看不出 hello 和 hello2 之间的区别。为什么 hello2 不能处于就绪状态?

[root@master2 hello]# kubectl get pods
NAME                     READY     STATUS             RESTARTS   AGE
hello-7db856d974-sg9kh   1/1       Running            0          1h
hello2-5c9c6776d-zgvhs   0/1       ImagePullBackOff   0          51m

然后我使用 kubectl 日志:它显示:

标签: kubernetes

解决方案


  1. 您将 jar 添加到/hello2.jarENTRYPOINT指向q/hello2.jar.

  2. 您的端口现在是8081,但 Springs 默认是8080您在第一次尝试中正确使用的端口。

您是否尝试在本地启动容器并查看日志?


推荐阅读