如何进入Spring Native镜像容器?
Spring Native Docker容器无法进入的解决方法
问题说明
按照Spring Native教程构建的Docker镜像启动容器后,执行docker exec -it <容器名> bash/sh//bin/sh均无法进入容器,报错如下:
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused:
exec: "/bin/sh": stat /bin/sh: no such file or directory: unknown或提示
$PATH not found
执行docker inspect <镜像名>查看镜像信息,显示"Cmd": null。
原因
Spring Native默认构建的是无基础依赖(distroless)的极简镜像,这类镜像为了缩小体积,剔除了shell、包管理器等额外工具,因此无法通过shell命令进入容器。
解决办法
1. 查看容器日志(无需进入容器)
如果只是排查应用运行问题,直接查看容器日志即可:
# 查看全部日志 docker logs <容器名> # 实时跟踪日志输出 docker logs -f <容器名>
2. 构建包含基础工具的镜像(支持shell进入)
如果确实需要进入容器调试,可修改构建配置,使用包含基础系统工具的构建镜像:
- Maven项目:在
pom.xml中调整Spring Native构建配置,指定base类型的builder镜像:<build> <plugins> <plugin> <groupId>org.springframework.experimental</groupId> <artifactId>spring-native-maven-plugin</artifactId> <configuration> <builder>paketobuildpacks/builder:base</builder> </configuration> </plugin> </plugins> </build> - Gradle项目:在
build.gradle中配置:springNative { builder = "paketobuildpacks/builder:base" }
重新构建镜像并启动容器后,即可通过docker exec -it <容器名> sh进入容器。
内容的提问来源于stack exchange,提问作者beatrice
相关产品推荐
相关产品推荐

