Я пытаюсь создать локальный реестр Docker, используя TestContainers и программатически подтолкнуть к нему изображение. Тем не менее, я получаю ошибку, отказавшаяся от подключения при попытке натолкнуть изображение. Первый тест, который проверяет, работает ли реестр работает, поэтому я знаю, что реестр работает. < /P>
Вот мой тестовый класс: < /p>
class DockerRegistryTest {
@Rule
public static GenericContainer registry;
private static String registryAddress;
private static DockerClient dockerClient;
@BeforeAll
static void startRegistry() {
registry = new GenericContainer(DockerImageName.parse("registry:2"))
.withExposedPorts(5000)
.waitingFor(Wait.forHttp("/v2/").forStatusCode(200));
registry.start();
assertTrue(registry.isRunning(), "Registry is running");
registryAddress = registry.getHost() + ":" + registry.getMappedPort(5000);
System.out.println("Registry available at: " + registryAddress);
DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder().build();
dockerClient = DockerClientImpl.getInstance(config, new ApacheDockerHttpClient.Builder()
.dockerHost(config.getDockerHost())
.sslConfig(config.getSSLConfig())
.build());
}
@AfterAll
static void tearDown() {
if (registry != null) {
registry.stop();
}
}
@Test
void testPushImageToRegistry() throws InterruptedException {
String localImage = "busybox:latest";
dockerClient.pullImageCmd(localImage).start().awaitCompletion();
String registryImageTag = registryAddress + "/busybox:latest";
dockerClient.tagImageCmd(localImage, registryAddress + "/busybox", "latest").exec();
dockerClient.pushImageCmd(registryImageTag)
.withAuthConfig(new AuthConfig()) // No authentication needed
.start()
.awaitCompletion();
System.out.println("Successfully pushed image to registry: " + registryImageTag);
assertTrue(true);
}
}
< /code>
Однако, когда я запускаю тест, я получаю эту ошибку: < /p>
com.github.dockerjava.api.exception.DockerClientException: Could not push image: failed to do request:
Head "https://localhost:57244/v2/busybox/blob ... 2606eefdfa":
dial tcp [::1]:57244: connect: connection refused
< /code>
Вещи, которые я попробовал < /p>
вручную теги и вставьте изображение в реестр, результат все еще подключено ошибка. < / / li>
Я побежал < /li>
< /ol>
C:\Users\codex>curl http://localhost:/v2/_catalog
{"repositories":[]}
< /code>
Итак, я знаю, что репозиторий работает и работает < /p>
Я также добавил это в testcontainers.properties
ryuk.container.image=testcontainersofficial/ryuk
, чтобы мой тестовый контейнер был в первую очередь. >
Обновление 1: < /p>
Я изменил < /p>
`registryAddress = registry.getHost() + ":" + registry.getMappedPort(5000);`
to RegistryAddress = "0.0.0.0" + ":" + Registry.getMapedPort (5000); Но теперь я получаю
`com.github.dockerjava.api.exception.DockerClientException: Could not push image: failed to do request: Head "https://0.0.0.0:60075/v2/busybox/blobs/ ... 3c3f2496de": http: server gave HTTP response to HTTPS client`
Подробнее здесь: https://stackoverflow.com/questions/794 ... containers