-
-
Notifications
You must be signed in to change notification settings - Fork 199
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix fetching registry credentials when using Gcloud cred helper #764
Conversation
✅ Deploy Preview for testcontainers-node ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
I'm not entirely sure if this is the correct fix -- just that it fixed my issue when I ran a test. I'm having difficulty running the entire suite locally. None of the tests failed at pulling an image fwiw |
Hi @HiranmayaGundu, looking the problem of testing the functionality, could we test this functionality with a private access image in Docker Hub? 🤔 |
@javierlopezdeancos we could, but it would have to be a private docker hub image that the project has access to (and presumably one that i personally don't have access to) |
hi @HiranmayaGundu yep, I think that should be an image created to someone from the docker organization to this proposes cc @eddumelendez @cristianrgreco |
I don't think using Docker Hub for such an integration test makes sense, since community contributors would not have access to such a private image. Can we replicate the scenario by starting a registry ourselves, or would the auth mechanism behave very differently? If a maintainer of the repo (e.g. @cristianrgreco) can manually test that this works, I think it is also fine and we should not block the merging if the can't find a way to conveniently test it. |
@javierlopezdeancos @cristianrgreco wanted to bump this for review 🙏🏽 |
Hi @HiranmayaGundu, thanks for raising this PR, I'll verify this works this weekend. |
Thank you @cristianrgreco! Appreciate it 😄 |
@HiranmayaGundu I can't reproduce the issue using an image from AWS ECR. I'm creating a container as follows: new GenericContainer("[ID].dkr.ecr.eu-west-2.amazonaws.com/[IMAGE-NAME]:latest") I am running this after I have done a After logging in I can see the registry key under Could you share some more info:
|
@cristianrgreco This issue only occured for me when I tried to build an image, so when doing const container = await GenericContainer.fromDockerfile("./dockerfile").build(); where the docker file is
The issue was consistently reproducible for me. I was using a private GCR repository for the base image.
|
I've tried as you said from a Dockerfile and it also works. The difference between your setup and mine is that you have a cred helper setup for gcloud. This is supported so we'll need to further debug what's going on. When you run: docker-credential-gcloud list Could you confirm that any of the keys in the response matches the gcr registry from which you're trying to pull the image? A match is considered if they're equal with or without protocol. If unsure please share the contents here, omitting any sensitive data. If there's a match, run: echo '<registry>' | docker-credential-gcloud get Where |
Yes, I have an exact match for the registry I am pulling from.
There is no |
Looks like there's a lot of inconsistency around the Google credential helpers, see here as well: #739. I guess there's no harm in defaulting to the registry URL if the @HiranmayaGundu are you OK to update the PR for this? I'm thinking |
Yeah, I can push the changes later today! |
fix: only use the default registry if the server url is undefined
@cristianrgreco made the changes! |
packages/testcontainers/src/container-runtime/auth/credential-provider.ts
Outdated
Show resolved
Hide resolved
…provider.ts Co-authored-by: Cristian Greco <[email protected]>
Thanks for the PR and for your patience in getting it reviewed and merged @HiranmayaGundu! I'm going to merge a couple of other patch changes and then do a release |
When creating a container using a docker image from a private repository, testcontainers would fail to auth correctly, and would never fetch the image. i.e.,
FROM gcr.io/<image>
would fail. This is not a problem when running the image directly. After a bit of digging, it seems likeserverURL
was being set as undefined, and it seems like the fix is to use the credentials object that has the server list.I'm not sure how to go about adding a test for this, it needs a Dockerfile to a private repository that the project has access to.