You're on your way to the next level! Join the Kudos program to earn points and save your progress.
Level 1: Seed
25 / 150 points
1 badge earned
Challenges come and go, but your rewards stay with you. Do more to earn more!
What goes around comes around! Share the love by gifting kudos to your peers.
Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!
Join now to unlock these features and more
Has anyone had any success getting self-hosted runners to launch in Docker under Google's Container-Optimized OS?
We ran a quick experiment with it, but the container has issues launching. The stack trace is substantial. But the key lines are:
2022-04-13 21:25:07,907] /tmp/libnetty_transport_native_epoll_x86_6413528779607542172002.so exists but cannot be executed even when execute permissions set; check volume for "noexec" flag; use -Dio.netty.native.workdir=[path] to set native working directory separately.
[2022-04-13 21:25:07,916] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'containerExecServiceImpl' defined in URL [jar:file:/opt/atlassian/pipelines/runner/bin/runner.jar!/com/atlassian/pipelines/runner/core/service/docker/ContainerExecServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dockerClient' defined in com.atlassian.pipelines.runner.core.configuration.spring.SpringConfigurationImpl: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.github.dockerjava.api.DockerClient]: Factory method 'dockerClient' threw exception; nested exception is java.lang.UnsatisfiedLinkError: failed to load the required native library
Maybe it's possible to bring in the native libraries that are expected here? Or maybe it's not?
The intersection of my knowledge of (CoS, GCloud, Docker, BB Runner Container) is pretty small.
Any tips from someone who's managed to make this work? If we can get CoS for runners going that's a whole lot nicer for us than a baked Debian image.
Hello @Ian Chesal ,
Welcome to Atlassian Community!
From the first error you have shared, it seems the /tmp directory used by default by runners was mounted with the noexec flag by the host OS, in this case CoS. You can list all the directories that have noexec flag by executing the following command :
mount | grep noexec
You could try removing the noexec flag from that volume and try executing the runner again, although removing that flag might have security implications.
Another option that I would personally recommend, is to change the working directory of your runner to a different folder that does not contain noexec flag.
By default, when you create a runner, you'll be given a command like the below :
docker container run -it -v /tmp:/tmp <rest of the parameters> docker-public.packages.atlassian.com/sox/atlassian/bitbucket-pipelines-runner:1
where it mounts the local directory on your machine called /tmp, as a directory inside the container also called /tmp
You can try creating another directory and use it as the tmp volume when creating a new runner container. The command would look like the following :
docker container run -it -v /home/user/runner:/tmp <rest of the parameters> docker-public.packages.atlassian.com/sox/atlassian/bitbucket-pipelines-runner:1
The above example will use local directory /home/user/runner as the tmp folder inside the container. Please make sure the /home/user/runner directory exists in the machine where you are running the container.
I'd also recommend referring to the following documentation for additional details:
Hope that helps. Do let us know in case you run into any issues.
Thank you @Ian Chesal