kubernetes - 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 日志:它显示:
解决方案
您将 jar 添加到
/hello2.jar
但ENTRYPOINT
指向q/hello2.jar
.您的端口现在是
8081
,但 Springs 默认是8080
您在第一次尝试中正确使用的端口。
您是否尝试在本地启动容器并查看日志?
推荐阅读
- php - 字符可见但不可选择/可突出显示
- java - 在 SharedPreferences 中存储访问令牌会返回空对象引用错误
- java - Anagram制作程序的JUnit测试?
- python - 如何让列表框打印包含项目名称和价格的字典 - Python
- selenium - 使用 Selenium + Chrome 驱动程序 + Browsermob 代理登录仅在我添加另一个代理时才有效 -> 为什么?
- javascript - 使用 Bootstrap 轮播错误消息获取无法读取未定义的属性“offsetWidth”
- c# - 如何使用 C# 模式匹配与元组
- c++ - 带有 Clang 10 的显式模板实例化的 ~queue 的未定义引用
- android - kotlin 中的运行时异常
- algorithm - 通过大师定理和迭代方法的递归关系 - 不同的对数底