Trino Testcontainer在Docker 19.x启动失败,20.x正常的问题咨询
问题分析:Docker 19.03.8中Trino Testcontainer启动失败报“Java is not installed”
核心结论
大概率是Docker版本差异导致的问题。尽管Testcontainers官方标注最低支持Docker v17.09,但Trino镜像的启动逻辑可能依赖更高版本Docker的特性,导致在19.03.8中无法正常识别内置的Java环境。
原因分析
- 镜像本身自带Java:Trino官方镜像(
trinodb/trino:latest)默认内置Java运行环境,报错提示“Java is not installed”并非镜像缺失Java,而是启动脚本无法正确检测到Java。 - Docker版本底层差异:Docker 19.03.x与20.10.x之间存在容器命名空间、文件系统挂载、环境变量传递等底层特性变化,这些差异可能导致Trino启动脚本的Java检测逻辑失效。
- 镜像隐性版本依赖:Trino最新镜像可能未明确标注,但实际隐性依赖较高版本的Docker特性,超出了Testcontainers的最低兼容范围。
解决方案
- 升级Docker版本:直接升级到Docker 20.10.x及以上版本(已验证该版本可正常运行),是最直接的解决方式。
- 指定旧版Trino镜像:若无法升级Docker,尝试使用Trino旧版本镜像(如
trinodb/trino:400),这类镜像的启动逻辑可能兼容Docker 19.03.x。 - 检查Testcontainers配置:确认是否存在自定义挂载目录覆盖了镜像内Java相关路径,或修改了容器环境变量,导致Java检测失败。
相关报错日志
D:2022-11-16 09:30:47.809 L:ERROR C:docker[trinodb/trino:latest] F:GenericContainer.java(531) Fn:tryStart T:main R: - Log output from the failed container: 11:30:55 11:30:55 + launcher_opts=(--etc-dir /etc/trino) 11:30:55 11:30:55 + grep -s -q node.id /etc/trino/node.properties 11:30:55 11:30:55 + launcher_opts+=("-Dnode.id=${HOSTNAME}") 11:30:55 11:30:55 + exec /usr/lib/trino/bin/launcher run --etc-dir /etc/trino -Dnode.id=e3cbef28ab27 11:30:55 11:30:55 ERROR: Java is not installed 11:30:55 11:30:55 11:30:55 11:30:55 [ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 160.744 s <<< FAILURE! - in com.radcom.queryexecutor.integration.TrinoIntegrationTest 11:30:55 11:30:55 [ERROR] com.radcom.queryexecutor.integration.TrinoIntegrationTest Time elapsed: 160.743 s <<< ERROR! 11:30:55 11:30:55 org.testcontainers.containers.ContainerLaunchException: Container startup failed 11:30:55 11:30:55 Caused by: org.rnorth.ducttape.RetryCountExceededException: Retry limit hit with exception 11:30:55 11:30:55 Caused by: org.testcontainers.containers.ContainerLaunchException: Could not create/start container 11:30:55 11:30:55 Caused by: java.lang.IllegalStateException: Container exited with code 4
内容的提问来源于stack exchange,提问作者Katia Solomon
相关产品推荐
相关产品推荐

