英文:
Running testcontainers with a custom Dockerfile: no such image
问题
从<custom-name>.artifactory.<company>.net/base/gobuilder:latest作为构建器开始
...
从<custom-name>.artifactory.<company>.net/base/distroless-base:<hash>开始
...
我在testcontainers库中遇到了一个问题。在大部分情况下,它只是运行Docker容器,所以我猜答案更多地与Docker相关,而不是与库本身相关。
你可以看到我使用我们公司在Artifactory注册表中的镜像的Dockerfile的大纲。在CI/CD中它工作得很好,但出于某种原因,在这个库中却不起作用。
req := testcontainers.ContainerRequest{
FromDockerfile: testcontainers.FromDockerfile{
Context: "/path/to/context/",
Dockerfile: "Dockerfile",
},
}
container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
ContainerRequest: req,
Started: true,
})
这是我在代码中创建容器的方式。
我得到的错误是:
Error response from daemon: no such image: 9305d9c8-1cfe-4c16-924b-3f734757d016:a6417aac-340b-4c37-a785-a45aa11f9ede: No such image: 9305d9c8-1cfe-4c16-924b-3f734757d016:a6417aac-340b-4c37-a785-a45aa11f9ede: failed to create container
--- FAIL: TestContainer
然而,如果我运行docker images -a
,我可以看到列出的镜像:
<custom-name>.artifactory.<company>.net/base/gobuilder latest 0ca0c1df3fa1 3 months ago 935MB
我尝试多次重启Docker服务,但没有成功。
我还可以尝试什么?
作为一个实验,我尝试使用Go的公共镜像,但得到了相同的错误。当返回错误时,它显示了一个不存在的镜像哈希,这也很奇怪。
<details>
<summary>英文:</summary>
FROM <custom-name>.artifactory.<company>.net/base/gobuilder:latest as builder
...
FROM <custom-name>.artifactory.<company>.net/base/distroless-base:<hash>
...
I have an issue with the testcontainers library. For the most part, it just runs Docker containers so I guess the answer is more Docker-specific rather than bound to the library itself.
You can see the outline of my Dockerfile that uses our company's images in our Artifactory registry. It works just fine in CI/CD but for some reason doesn't with this library.
req := testcontainers.ContainerRequest{
FromDockerfile: testcontainers.FromDockerfile{
Context: "/path/to/context/,
Dockerfile: "Dockerfile",
},
}
container, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
ContainerRequest: req,
Started: true,
})
This is how I create the container in my code.
What I get is this error:
Error response from daemon: no such image: 9305d9c8-1cfe-4c16-924b-3f734757d016:a6417aac-340b-4c37-a785-a45aa11f9ede: No such image: 9305d9c8-1cfe-4c16-924b-3f734757d016:a6417aac-340b-4c37-a785-a45aa11f9ede: failed to create container
--- FAIL: TestContainer
Nonetheless, if I run `docker images -a`, I see the image listed:
<custom-name>.artifactory.<company>.net/base/gobuilder latest 0ca0c1df3fa1 3 months ago 935MB
I have tried to restart the Docker service multiple times but with no luck.
What else could I try?
As an experiment, I tried to use a public image for Go but got the same error. It's also strange that it shows a non-existing image hash when returning the error.
</details>
# 答案1
**得分**: 2
我们使用的是Testcontainers for Go的哪个版本?在最新的发布版本v0.19.0中,可以从私有注册表构建Dockerfile,而无需传递凭据,因为Docker凭据助手会自动发现它们。https://golang.testcontainers.org/features/docker_auth/
在以前的版本中,你被迫将认证凭据作为`FromDockerfile`结构的一部分传递。
<details>
<summary>英文:</summary>
What version of Testcontainers for Go do you use? In the latest release, v0.19.0, it's possible to build from a Dockerfile from private registries without passing the credentials, as they will be automatically discovered by the Docker credentials helpers. https://golang.testcontainers.org/features/docker_auth/
req := ContainerRequest{
FromDockerfile: testcontainers.FromDockerfile{
Context: "/path/to/build/context",
Dockerfile: "CustomDockerfile",
BuildArgs: map[string]*string {
"FOO": "BAR",
},
},
}
In previous versions you were forced to pass the auth credentials as part of the `FromDockerfile` struct.
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论