idrisadetunmbi
idrisadetunmbi

Reputation: 1027

Specify Dockerfile for gcloud build submit

I understand gcloud uses the Dockerfile specified in the root directory of the source (.) as in the command: gcloud builds submit --tag gcr.io/[PROJECT_ID]/quickstart-image .

but I am trying to specify the Dockerfile to use to build the image which I have not found any resource on how to do that, I don't know if that is possible.

Upvotes: 25

Views: 31786

Answers (8)

Luiz Bom
Luiz Bom

Reputation: 23

In my case, I was getting this error because the the dockerfile was all in lowercase. Just rename it to Dockerfile with an uppercase D and the command will work.

mv dockerfile Dockerfile

Upvotes: -1

Robert
Robert

Reputation: 533

I found the solution in my case was that the docker file has to be spelt with this case format Dockerfile. I had DockerFile and it won't find that. It is case sensitive.

Upvotes: -1

Sheikh Juned
Sheikh Juned

Reputation: 11

I tried multiple solutions but they didn't work for me. I was using the bitBucket pipeline So I used the following approach.

  1. When I run stage env

    cp ./ENV/stage/Dockerfile ./Dockerfile gcloud builds submit --tag gcr.io/your-project/your-image

  2. When I run prod env

    cp ./ENV/prod/Dockerfile ./Dockerfile gcloud builds submit --tag gcr.io/your-project/your-image

Upvotes: 0

Antoine Luckenson
Antoine Luckenson

Reputation: 7

The gcloud build submit will detect automatically your Dockerfile if present, make sure your place the file in your root directory. If you don't know that much about docker you can use this command

gcloud beta run deploy --source=.

Execute it at your root directory. the buildpacks will create the dockerfile for you and it is able to detect the stack of your application so it can build with its relevant tools.

Upvotes: -2

Coco
Coco

Reputation: 261

You can very easily do this by substituting the . by ./path/to/YourDockerFile, so the gcloud command will be:

gcloud builds submit --tag gcr.io/[PROJECT_ID]/quickstart-image ./path/to/YourDockerFile

So you don't have to use a cloudbuild.yaml for this.

Upvotes: 21

Zaar Hai
Zaar Hai

Reputation: 9889

Eventually the following hack works for me quite well. If you have e.g. Dockerfile.prod and Dockerfile.dev use the following to build the latter.

tar --exclude-vcs-ignores \  # sort-of .dockerignore support
    --transform='s|^\./Dockerfile.dev|./Dockerfile|' -zcf /tmp/togo.tgz . && \
            gcloud builds submit --tag=gcr.io/my-project/foo:latest /tmp/togo.tgz

Upvotes: 0

DazWilkin
DazWilkin

Reputation: 40336

The only way to specify a Dockerfile (i.e. other than ./Dockerfile) would be to create a cloudbuild.yaml per techtabu@. This config could then use the docker builder and provide the specific Dockerfile, i.e.:

steps:
- name: "gcr.io/cloud-builders/docker"
  args:
  - build
  - "--tag=gcr.io/$PROJECT_ID/quickstart-image"
  - "--file=./path/to/YourDockerFile"
  - .
...
images:
- "gcr.io/$PROJECT_ID/quickstart-image"

If you wish, you also get to specify an alternative name than cloudbuild.yaml.

The ./Dockerfile assumption is presumably to ease the transition to Cloud Build.

I recommend you switch to using cloudbuild.yaml for the flexibility it provides.

Upvotes: 23

techtabu
techtabu

Reputation: 27157

I am not sure if you can specify Dockerfile, but you can use cloudbuild.yaml file. Check gcloud documentation. If you want to rename this file, you can use config option.

    gcloud builds submit --config cloudbuild.yaml .

A sample cloudbuild.yaml file look like this,

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/quickstart-image', '.' ]
images:
- 'gcr.io/$PROJECT_ID/quickstart-image'

Upvotes: 8

Related Questions