Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in
Celebration

Earn badges and make progress

You're on your way to the next level! Join the Kudos program to earn points and save your progress.

Deleted user Avatar
Deleted user

Level 1: Seed

25 / 150 points

Next: Root

Avatar

1 badge earned

Collect

Participate in fun challenges

Challenges come and go, but your rewards stay with you. Do more to earn more!

Challenges
Coins

Gift kudos to your peers

What goes around comes around! Share the love by gifting kudos to your peers.

Recognition
Ribbon

Rise up in the ranks

Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!

Leaderboard

Come for the products,
stay for the community

The Atlassian Community can help you and your team get more value out of Atlassian products and practices.

Atlassian Community about banner
4,559,049
Community Members
 
Community Events
184
Community Groups

Push an image whose name contains slashes

Edited

As image names can be specified in AWS ECR with slashes, for example, "my-group/my-image-name" I would like to specify this information in a pipe. So it would look like:

- step: 
name: Build Dockerfile and push it to ECR
script:
- docker build -t my-group/my-image-name .
- pipe: atlassian/aws-ecr-push-image:1.5.0
variables:
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
IMAGE_NAME: my-group/my-image-name
DEBUG: "true"

When I've tried this, the following error was thrown:

DEBUG: http://host.docker.internal:2375 "POST /v1.41/images/xxxx.dkr.ecr.xxxx.amazonaws.com/my-group/my-image-name/push?tag=latest HTTP/1.1" 200 None
INFO: {'status': 'The push refers to repository [xxxx.dkr.ecr.xxxx.amazonaws.com/my-group/my-image-name]'}
INFO: {'status': 'Preparing', 'progressDetail': {}, 'id': '6816afbbb3be'}
INFO: {'status': 'Preparing', 'progressDetail': {}, 'id': '16fdcefba9b2'}
INFO: {'status': 'Preparing', 'progressDetail': {}, 'id': 'ea44e3716f74'}
INFO: {'status': 'Preparing', 'progressDetail': {}, 'id': '8607c8c34ac2'}
INFO: {'status': 'Preparing', 'progressDetail': {}, 'id': 'c9109473da10'}
INFO: {'status': 'Preparing', 'progressDetail': {}, 'id': '16c770f32328'}
INFO: {'status': 'Preparing', 'progressDetail': {}, 'id': '866fb7fffb5e'}
INFO: {'status': 'Preparing', 'progressDetail': {}, 'id': '25b3fd43616d'}
INFO: {'status': 'Preparing', 'progressDetail': {}, 'id': '957cc3cb8f33'}
INFO: {'status': 'Preparing', 'progressDetail': {}, 'id': '31d8693e83b2'}
INFO: {'status': 'Preparing', 'progressDetail': {}, 'id': '640439866c2f'}
INFO: {'status': 'Preparing', 'progressDetail': {}, 'id': '5d2a276f8b89'}
INFO: {'status': 'Preparing', 'progressDetail': {}, 'id': '058670b42da8'}
INFO: {'status': 'Preparing', 'progressDetail': {}, 'id': '9f54eef41275'}
INFO: {'status': 'Waiting', 'progressDetail': {}, 'id': '16c770f32328'}
INFO: {'status': 'Waiting', 'progressDetail': {}, 'id': '866fb7fffb5e'}
INFO: {'status': 'Waiting', 'progressDetail': {}, 'id': '25b3fd43616d'}
INFO: {'status': 'Waiting', 'progressDetail': {}, 'id': '957cc3cb8f33'}
INFO: {'status': 'Waiting', 'progressDetail': {}, 'id': '31d8693e83b2'}
INFO: {'status': 'Waiting', 'progressDetail': {}, 'id': '640439866c2f'}
INFO: {'status': 'Waiting', 'progressDetail': {}, 'id': '5d2a276f8b89'}
INFO: {'status': 'Waiting', 'progressDetail': {}, 'id': '058670b42da8'}
INFO: {'status': 'Waiting', 'progressDetail': {}, 'id': '9f54eef41275'}
INFO: {'status': 'Retrying in 5 seconds', 'progressDetail': {}, 'id': '8607c8c34ac2'}
INFO: {'status': 'Retrying in 5 seconds', 'progressDetail': {}, 'id': '6816afbbb3be'}

 After several attempts, the error is:

INFO: {'errorDetail': {'message': 'EOF'}, 'error': 'EOF'}
✖ Docker push error: EOF

I have tried it without the slash, i.e. "my-image-name", it worked properly. Also, I've tried it manually, i.e. doing it with the AWS CLI, and it worked with the slash in the name.

Am I doing something wrong?

Thanks!

Update:

I have tried the name with an underscore an it's failing too. 

Also, I've forked the project: https://bitbucket.org/atlassian/aws-ecr-push-image/src/master/ and I've tried the pipe locally, building the Dockerfile and running a container like:

docker run -it -e AWS_ACCESS_KEY_ID=xxx -e AWS_DEFAULT_REGION=xxx -e AWS_SECRET_ACCESS_KEY=xxxx -e IMAGE_NAME=my-group/my-image-name -w $(pwd) -v $(pwd):$(pwd) -v /var/run/docker.sock:/var/run/docker.sock aws-ecr-pipe

 And this has worked. 

So my suspicion is that maybe it's related to how Bitbucket is managing the variable "IMAGE_NAME". 

7 answers

1 accepted

1 vote
Answer accepted
For others with similar symptom, but correct naming, check your credentials on AWS. I got the exact same symptom (and therefore found this topic) and it was because I had not setup the policy for bitbucket service user correctly.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
 "ecr:CompleteLayerUpload",
"ecr:DescribeImages",
 "ecr:DescribeRepositories",
"ecr:GetAuthorizationToken",
"ecr:GetDownloadUrlForLayer",
"ecr:GetRepositoryPolicy",
"ecr:InitiateLayerUpload",
"ecr:ListImages",
"ecr:PutImage",
"ecr:UploadLayerPart"
],
"Resource": "<accountnumber>.dkr.ecr.<your-region>.amazonaws.com/*"
}
]
}

 

This solved my issue , thank you !!!

1 vote
Nic Brough -Adaptavist-
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
Dec 20, 2021

Slashes are control characters, indicating escaping or directories.

You will need to escape them in the name of the file if you insist on using them, or adopt the good practice of not using them in file names.

Hi Nic,

I've absolutely the same issue as described above.

- step: 
name: Build Dockerfile and push it to ECR
script:
- docker build -t my-group/my-image-name .
- pipe: atlassian/aws-ecr-push-image:1.5.0
variables:
IMAGE_NAME: my-group/my-image-name
DEBUG: "true"

Can you please explain how to escape the image name like my-group/my-image-name? When I tried to add a backslash in the repository variable the docker build failed with the following error:

invalid argument "my-group\\/my-image-name" for "-t, --tag" flag: invalid reference format

Thanks,
Igor
 

0 votes
Dimitry Kudryavtsev
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
Feb 07, 2023

@Igor Stoyanov does the ECR need to be created before you can push images to it?

Igor Stoyanov
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
Feb 08, 2023

@Dimitry Kudryavtsev  hi. According to pipe README:

Prerequisites

To use this pipe you should have a IAM user configured with programmatic access or Web Identity Provider (OIDC) role, with the necessary permissions to push docker images to your ECR repository. You also need to set up an ECR container registry if you don't already have on. Here is a AWS ECR Getting started guide from AWS on how to set up a new registry.

 

So the answer is yes.

 

Regards, Igor

0 votes
Igor Stoyanov
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
Sep 19, 2022

@mgarcia  hi. So i tested this case and found no issues.

You can find my config here .

As you can see i have IMAGE_NAME  test/bbci-pipes-test-ecr-${BITBUCKET_BUILD_NUMBER} which is equal for my build test/bbci-pipes-test-ecr-186 

I successfully pushed image to ECR.

The only case when i received your error: INFO: {'errorDetail': {'message': 'EOF'}, 'error': 'EOF'}\x1b[0m\n\x1b[31m✖ Docker push error: EOF\x1b[0m\n"
was only when docker image name not the same as provided in pipe variables.

In example you built test/bbci-pipes-test-ecr-186 but tried to push to 123456789.dkr.ecr.us-east-1.amazonaws.com/bbci-pipes-test-ecr-186 (without test/ group)

Also our team updated tests to incude case with slashes and will soon release a new patch to include these updates.


Regards, Igor

Screenshot 2022-09-19 at 18.08.40.pngScreenshot 2022-09-19 at 18.06.15.png

Igor Stoyanov
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
Sep 19, 2022

Added config directly:

script:
  - IMAGE_NAME="test/bbci-pipes-test-ecr-${BITBUCKET_BUILD_NUMBER}"
  - docker build -t ${IMAGE_NAME} .
  - docker image inspect ${IMAGE_NAME}
  - pipe: atlassian/aws-ecr-push-image:1.6.0
    variables:
      AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
      AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
      AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
      IMAGE_NAME: ${IMAGE_NAME}
services:
  - docker

@mgarcia,

I was experiencing the same problem. Here's how you can solve it --

Instead of:

IMAGE_NAME: my-group/my-image-name

use:

IMAGE_NAME: my-image-name

 

Explanation: AWS ECR may contain several repos for your different container images and as far as I'm concerned, ECR repos are not meant to be act as a group like you intended. 

Let me know if this helps.

I received the same error when "-" was in the image name.

And you can't add underscore. Just tested both. I would feel better if unit tests checked for the common naming convention special characters.

Disregard. Error message was the same but the issue was I did not have the Elastic Container Registry created yet.

0 votes
Igor Stoyanov
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
Dec 24, 2021

@mgarcia@Igor S_  hi. We will investigate this issue and notify you.

Regards, Igor.

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events