amazon-kinesis-producer: IrrecoverableError: Error starting child process[alpine-docker issue]

Version : amazon-kinesis-producer : 0.12.1

I’m running a Kinesis Producer inside a docker container , and getting this error :

com.amazonaws.services.kinesis.producer.IrrecoverableError: Error starting child process at com.amazonaws.services.kinesis.producer.Daemon.fatalError(Daemon.java:520) [application.jar:0.1] at com.amazonaws.services.kinesis.producer.Daemon.startChildProcess(Daemon.java:453) [application.jar:0.1] at com.amazonaws.services.kinesis.producer.Daemon.access$100(Daemon.java:62) [application.jar:0.1] at com.amazonaws.services.kinesis.producer.Daemon$1.run(Daemon.java:132) [application.jar:0.1] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_92-internal] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_92-internal] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_92-internal] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_92-internal] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_92-internal] Caused by: java.io.IOException: Cannot run program "/tmp/amazon-kinesis-producer-native-binaries/kinesis_producer_f40412a63c9816 d7b4c06e0b1f597c4f3280d36e": error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) ~[na:1.8.0_92-internal]

It says that it can’t find file in “/tmp/amazon…” , however I’m able to the file available there , what might be the issue ?

About this issue

  • Original URL
  • State: open
  • Created 8 years ago
  • Reactions: 5
  • Comments: 20 (2 by maintainers)

Most upvoted comments

@pfifer is there any possibility of getting this fixed? alpine linux is much more docker friendly compared to any ubuntu images.

It appears Alpine Linux is based of musl libc and busybox. The kinesis_producer binary is linked against glibc, so when the loader kicks off it’s failing to find correct libc.so and causing this error message. The only way to support Alpine Linux would be to compile the kinesis_producer against musl libc.

I had a similar problem running a Kinesis producer daemon within a docker container built from an alpine image.

We fixed it using ubuntu as a base image for that service.

EDIT: grammar (oh god, my english is awful)

Any way to get around this with java 11 and amazoncorretto? It’s pretty ironic that of all implementations, the amazon one doesn’t gel with kinesis.

I’m building the docker from amazoncorretto:11 and running from amazoncorretto:11-alpine (maybe there’s a different jre better suited for this?)

The problem isn’t corretto, the problem is alpine. It doesn’t have glibc which isn’t a dependency for Java, but it is a dependency for the Amazon kinesis native library. You’d be better using an Ubuntu slim docket image.

Any way to get around this with java 11 and amazoncorretto? It’s pretty ironic that of all implementations, the amazon one doesn’t gel with kinesis. I’m building the docker from amazoncorretto:11 and running from amazoncorretto:11-alpine (maybe there’s a different jre better suited for this?)

You have a few options…

  1. Continue to use an alpine Linux based openjdk image… And add glibc. We built or own that is available on docker hub https://hub.docker.com/r/bncprojects/openjdk/ and on GitHub https://github.com/bnc-projects/base-openjdk
  2. Use a different openjdk Linux docker image like slim that already has glibc.

I changed the base docker container to frolvlad/alpine-oraclejdk8 which has glibc installed.

The stack trace you provided is the message you would expect to see for a linked library missing. The The file not found is coming from the inability to load glibc.