kstyrc / embedded-redis

Redis embedded server for Java integration testing
832 stars 366 forks source link

Cannot run program \"/tmp/1550585186512-0/redis-server-2.8.19\" (in directory \"/tmp/1550585186512-0\"): error=2, No such file or directory #102

Open bruno-de-queiroz opened 5 years ago

bruno-de-queiroz commented 5 years ago

I'm using micronaut and when I'm running the app inside a container I'm receiving this error at first:

Path Taken: StatefulRedisConnection.redisConnection([RedisClient redisClient]) --> RedisClient.redisClient([AbstractRedisConfiguration config])
    at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1343)
    at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:1902)
    at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:1623)
    at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:1603)
    at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:896)
    at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:973)
    ... 58 common frames omitted
Caused by: redis.embedded.exceptions.EmbeddedRedisException: Failed to start Redis instance
    at redis.embedded.AbstractRedisInstance.start(AbstractRedisInstance.java:42)
    at redis.embedded.RedisServer.start(RedisServer.java:9)
    at io.micronaut.configuration.lettuce.test.EmbeddedRedisServer.onCreated(EmbeddedRedisServer.java:79)
    at io.micronaut.configuration.lettuce.test.EmbeddedRedisServer.onCreated(EmbeddedRedisServer.java:44)
    at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1374)
    at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:1902)
    at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:1623)
    at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:1603)
    at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:896)
    at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:973)
    at io.micronaut.configuration.lettuce.$DefaultRedisClientFactory$RedisClientDefinition.build(Unknown Source)
    at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1329)
    ... 63 common frames omitted
Caused by: java.io.IOException: Cannot run program \"/tmp/1550585186512-0/redis-server-2.8.19\" (in directory \"/tmp/1550585186512-0\"): error=2, No such file or directory
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
    at redis.embedded.AbstractRedisInstance.start(AbstractRedisInstance.java:37)
    ... 74 common frames omitted
Caused by: java.io.IOException: error=2, No such file or directory
    at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
    at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:340)
    at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:271)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
    ... 76 common frames omitted

After this error, the path, the binary file and the config file are created, but when the application tries to create the server again it throws:

Message: Redis configuration is already set using redis conf file!
Path Taken: StatefulRedisConnection.redisConnection([RedisClient redisClient]) --> RedisClient.redisClient([AbstractRedisConfiguration config])
    at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1343)
    at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:1902)
    at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:1623)
    at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:1603)
    at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:896)
    at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:973)
    ... 59 common frames omitted
Caused by: redis.embedded.exceptions.RedisBuildingException: Redis configuration is already set using redis conf file!
    at redis.embedded.RedisServerBuilder.setting(RedisServerBuilder.java:56)
    at io.micronaut.configuration.lettuce.test.EmbeddedRedisServer.onCreated(EmbeddedRedisServer.java:77)
    at io.micronaut.configuration.lettuce.test.EmbeddedRedisServer.onCreated(EmbeddedRedisServer.java:44)
    at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1374)
    at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:1902)
    at io.micronaut.context.DefaultBeanContext.getBeanForDefinition(DefaultBeanContext.java:1623)
    at io.micronaut.context.DefaultBeanContext.getBeanInternal(DefaultBeanContext.java:1603)
    at io.micronaut.context.DefaultBeanContext.getBean(DefaultBeanContext.java:896)
    at io.micronaut.context.AbstractBeanDefinition.getBeanForConstructorArgument(AbstractBeanDefinition.java:973)
    at io.micronaut.configuration.lettuce.$DefaultRedisClientFactory$RedisClientDefinition.build(Unknown Source)
    at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1329)
    ... 64 common frames omitted

So I guess there is some sort of delay by the time we unpack the files to the specific folder, and the code is not prepared for that scenario. Any ideas?

bruno-de-queiroz commented 5 years ago

UPDATE Happens when the image is an openjdk:*-jdk-alpine if its openjdk:*-jdk-oracle it works just fine

jjhuangw commented 4 years ago

I also faced the same problem. It works to me by using the version which was built from alpine.

kingan379 commented 1 year ago

Im having the same issue