Skip to content

Podman: Environment/mounts not passed to custom services #89

@sm453

Description

@sm453

It appears that when running custom containers in a stack with Podman, key environment variables like EXECUTABLE, API_SOCK, and others, as well as the bind mount -v /run/user/1000/podman/podman.sock:/var/run/docker.sock, are not visible from those containers, causing exceptions like this one:

: java.lang.IllegalArgumentException: Service 'docker', of type 'docker', could not be created.
        at com.cmclinnovations.stack.services.ServiceManager.initialiseService(ServiceManager.java:160)
        at com.cmclinnovations.stack.services.ServiceManager.getOrInitialiseService(ServiceManager.java:192)
        at com.cmclinnovations.stack.services.ServiceManager.initialiseService(ServiceManager.java:167)
        at com.cmclinnovations.stack.clients.timeseries.TimeSeriesRDBClient.configureOntop(TimeSeriesRDBClient.java:97)
        at com.cmclinnovations.stack.clients.timeseries.TimeSeriesRDBClient.bulkInitTimeSeriesTable(TimeSeriesRDBClient.java:74)
        at uk.ac.cam.cares.jps.base.timeseries.TimeSeriesClient.bulkInitTimeSeries(TimeSeriesClient.java:311)
        at uk.ac.cam.cares.jps.base.timeseries.TimeSeriesClient.bulkInitTimeSeries(TimeSeriesClient.java:1319)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
        at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:374)
        at py4j.Gateway.invoke(Gateway.java:282)
        at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
        at py4j.commands.CallCommand.execute(CallCommand.java:79)
        at py4j.GatewayConnection.run(GatewayConnection.java:238)
        at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:74)
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
        at com.cmclinnovations.stack.services.ServiceManager.initialiseService(ServiceManager.java:157)
        ... 15 more
Caused by: java.lang.RuntimeException: java.net.SocketException: No such file or directory
        at com.github.dockerjava.httpclient5.ApacheDockerHttpClientImpl.execute(ApacheDockerHttpClientImpl.java:193)
        at com.github.dockerjava.httpclient5.ApacheDockerHttpClient.execute(ApacheDockerHttpClient.java:9)
        at com.github.dockerjava.core.DefaultInvocationBuilder.execute(DefaultInvocationBuilder.java:228)
        at com.github.dockerjava.core.DefaultInvocationBuilder.get(DefaultInvocationBuilder.java:202)
        at com.github.dockerjava.core.DefaultInvocationBuilder.get(DefaultInvocationBuilder.java:74)
        at com.github.dockerjava.core.exec.ListNetworksCmdExec.execute(ListNetworksCmdExec.java:35)
        at com.github.dockerjava.core.exec.ListNetworksCmdExec.execute(ListNetworksCmdExec.java:16)
        at com.github.dockerjava.core.exec.AbstrSyncDockerCmdExec.exec(AbstrSyncDockerCmdExec.java:21)
        at com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:33)
        at com.cmclinnovations.stack.services.DockerService.createNetwork(DockerService.java:202)
        at com.cmclinnovations.stack.services.DockerService.<init>(DockerService.java:89)
        at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
        ... 18 more
Caused by: java.net.SocketException: No such file or directory
        at java.base/sun.nio.ch.UnixDomainSockets.connect0(Native Method)
        at java.base/sun.nio.ch.UnixDomainSockets.connect(UnixDomainSockets.java:154)
        at java.base/sun.nio.ch.UnixDomainSockets.connect(UnixDomainSockets.java:150)
        at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:878)
        at java.base/java.nio.channels.SocketChannel.open(SocketChannel.java:285)
        at com.github.dockerjava.transport.UnixSocket.<init>(UnixSocket.java:45)
        at com.github.dockerjava.transport.UnixSocket.get(UnixSocket.java:27)
        at com.github.dockerjava.httpclient5.ApacheDockerHttpClientImpl.lambda$createConnectionOperator$1(ApacheDockerHttpClientImpl.java:151)
        at org.apache.hc.client5.http.io.DetachedSocketFactory.create(DetachedSocketFactory.java:51)
        at org.apache.hc.client5.http.impl.io.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:182)
        at org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:497)
        at org.apache.hc.client5.http.impl.classic.InternalExecRuntime.connectEndpoint(InternalExecRuntime.java:164)

NB The container works fine when the stack is run using Docker. A work-around when using Podman is to manually add the missing environment variables and bind mount to the service config json file.

Metadata

Metadata

Assignees

Labels

🐛 bugSomething isn't working

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions