(question moved from the Bitbucket section)
We have a simple app we're trying to build in much the same vein as this article:
We have everything the app needs except the repo on a private image in GCR. We've set up a pipelines yml as close to the example as we can get, but when it gets to the docker build portion, it throws this error:
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /opt/atlassian/pipelines/agent/build/Dockerfile: no such file or directory
What we want to happen here is for Pipelines to take our base image (image A), clone the repo into a folder on that image, and then push the resulting image back up as a production-ready image (image B, which is just image A with our repo in it)
I'd like to confirm my understanding of how this would occur:
- the Pipelines Docker build environment is pulling our image and (as the build setup process) creating a container from that image and cloning the repo into that container in $BITBUCKET_CLONE_DIR
- the build environment (not our container) is then building (or committing?) the container that now has our repo and pushing it up
options: docker: true
image: name: us.gcr.io/our-project/ourImage:buildTag
name: Build Production Image
caches: - docker
- docker build -t us.gcr.io/$GCLOUD_PROJECT/$IMAGE_NAME:$IMAGE_TAG .
- docker push us.gcr.io/$GCLOUD_PROJECT/$IMAGE_NAME:$IMAGE_TAG
I think what I'm confused about is the Dockerfile: am I meant to supply a Dockerfile in that path on my image? Or is docker build not even what I'm after here since I just want to commit the environment as I have it?
Thanks for your help!
What is the location of your Dockerfile? The error is indicating that Docker can't find a Dockerfile in the current directory.
If you need to specific the path of the Dockerfile, you can use the `-f` flag
docker build -f <path_to_docker_file> -t us.gcr.io/$GCLOUD_PROJECT/$IMAGE_NAME:$IMAGE_TAG .
I know that I can supply a Dockerfile, but the example (in the link in my post) didn't reference doing that -- I figured out from the error that I could just add the folder /opt/atlassian/pipelines/agent/build/ to my build image and put a Dockerfile in it, but the help article didn't say anything about that.
So while on the one hand it's obvious that you need a Dockerfile for docker build to do anything -- the Atlassian page says "just do this and Pipelines will build your app" while running their code exactly will produce the error. I wasn't sure when I wrote this post what all was going on in Pipelines (since it has its own Docker environment) and at first it seemed like they were injecting a Dockerfile based on Pipelines environment variables. That made less sense as I got into it.
Thanks for your assistance!
You either have no Dockerfile in the current directory or your Dockerfile is called something else. You can specify the docker file with the -f option.
$ docker build -f Dockerfile.debug .
For more info
We are excited to announce the open beta program for self-hosted runners. Bitbucket Pipelines Runners is available to everyone. Please try it and let us know your feedback. If you have any issue...
Connect with like-minded Atlassian users at free events near you!Find an event
Connect with like-minded Atlassian users at free events near you!
Unfortunately there are no Community Events near you at the moment.Host an event
You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events