I need to run my build as a non-root user.
This shows how to do it but it would be better if there was a simple configuration step I could. Is there?
You can override override the default user of your build container using the `run-as-user` parameter in your image configuration.
More details on this page: Use Docker images as build environments.
@Matt Ryall I tried your suggestion, however CHMOD 777 fails, please see https://community.atlassian.com/t5/Bitbucket-questions/chmod-777-BUILD-DIR-fails/qaq-p/726868
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
It is an old topic but, please, avoid chmod 777 unless really necessary.
Don't make potential security holes on your server.
When non-root, during deployment, one shall use only available permission against own application or docker which shall be non root.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Using `run-as-user` did not work for me either. This is how I did it using gosu,
$ cat bitbucket-pipelines.yml
# https://confluence.atlassian.com/bitbucket/bitbucket-pipelines-beta-792496469.html
# You can use any Docker image from Docker Hub or your own container registry
image: maven:3.3.3
clone:
depth: 50 # Need to clone more than 1 to allow builds to be rerun without requiring a rebase
pipelines:
default:
- step:
size: 2x
caches:
- maven
script: # Modify the commands below to build and test your repository.
- ./bitbucket-pipelines-gosu.sh
- id -u build &>/dev/null || useradd --user-group --create-home --shell /bin/false build
- gosu build mvn --version
- gosu build mvn -B clean install
$ cat bitbucket-pipelines-gosu.sh
#!/usr/bin/env bash
# https://github.com/tianon/gosu/issues/16
#add-apt-repository ppa:tianon/gosu
apt-get update
apt-get install -y --no-install-recommends gosu
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
So effectively the default user in your image still is root I guess and the user is created in script runtime. This won't work as my image has a different default user. I wonder what the application specifications say for the bitbucket pipeline service in this scenario. Is there a requirement to run an image as root? So to share the root user resource between the host system and the pipeline?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Janek,
Your docker image (in this case maven:3.3.3) has a default run-as-user directive (probably root) that is defined when the image was created and determines what user the build container is run as.
If you wish to run the build container as a different user you can do 2 things:
image:
name: maven:3.3.3
run-as-user: 1000
This feature simply allow you to instruct Pipelines to start the build container as a different user when more than 1 user exists in the image and the one you want to run as is not the default.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
HI @StannousBaratheon when my Docker image has the USER directive (and non-root), the build is marked as failed within the build init step (before any pipeline step script command itself is actually run). Any idea?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.