Shell脚本在Ubuntu正常运行,为何在Amazon Linux 2报'-c选项未识别'错误?
问题原因与解决方案
问题根源
你使用的GraalVM native-image镜像默认ENTRYPOINT是gu工具,而非bash。在Ubuntu环境中可能因Shell解析特性让命令被误打误撞正确处理,但在Amazon Linux 2的Shell环境下,Docker会将/bin/bash -c ...当作gu的参数传递,而gu并不识别-c选项,因此触发报错。
修复后的命令
显式通过--entrypoint指定启动bash,替换镜像默认的ENTRYPOINT,确保-c参数被bash正确接收:
docker run --rm --name graal --entrypoint /bin/bash -v $(pwd):/${PROJECT_NAME} ghcr.io/graalvm/native-image:ol8-java11-22.2.0 \ -c "gu install native-image; \ native-image \ -H:EnableURLProtocols=http \ -H:ReflectionConfigurationFiles=/${PROJECT_NAME}/reflect.json \ -jar /${PROJECT_NAME}/target/${PROJECT_NAME}-${PROJECT_VERSION}.jar \ ; \ mkdir /${PROJECT_NAME}/target/custom-runtime \ ; \ cp ${PROJECT_NAME}-${PROJECT_VERSION} /${PROJECT_NAME}/target/custom-runtime/${PROJECT_NAME}"
验证方式
你可以通过以下命令确认镜像的默认ENTRYPOINT:
docker inspect ghcr.io/graalvm/native-image:ol8-java11-22.2.0 | grep -A 10 Entrypoint
内容的提问来源于stack exchange,提问作者bigwig87
相关产品推荐
相关产品推荐

