Я хотел бы запустить TestContainers с модулем Postgres, чтобы Postgres сохранял данные на диск хоста. Мне бы хотелось, чтобы я мог запускать и останавливать тестовый контейнер, и данные, хранящиеся в базе данных, сохранялись бы при перезапусках.
При настройке по умолчанию я получаю пустую базу данных postgres каждый раз, когда запускается TestContainer.
Похоже, что запуск ожидает этой строки в системе базы данных, готовой принимать соединения журналы postgres. Кажется, этот журнал появляется, но только после сбоя.
Я попробовал следующее:
val container = PostgreSQLContainer("postgres:17")
.withDatabaseName("db-name")
.withUsername("username")
.withPassword("password")
.withFileSystemBind("/tmp/db", "/var/lib/postgresql/data", BindMode.READ_WRITE)
Это работает при первом запуске: образ запускается и работает, файлы базы данных создаются в /tmp/db. Однако при дальнейших стартах происходит следующее. Запуск занимает много времени, а затем происходит сбой.
[main] INFO {} org.testcontainers.images.PullPolicy - Image pull policy will be performed by: DefaultPullPolicy()
[main] INFO {} org.testcontainers.utility.ImageNameSubstitutor - Image name substitution will be performed by: DefaultImageNameSubstitutor (composite of 'ConfigurationFileImageNameSubstitutor' and 'PrefixingImageNameSubstitutor')
[main] INFO {} org.testcontainers.DockerClientFactory - Testcontainers version: 1.20.4
[main] INFO {} org.testcontainers.dockerclient.DockerClientProviderStrategy - Loaded org.testcontainers.dockerclient.UnixSocketClientProviderStrategy from ~/.testcontainers.properties, will try it first
[main] INFO {} org.testcontainers.dockerclient.DockerClientProviderStrategy - Found Docker environment with local Unix socket (unix:///var/run/docker.sock)
[main] INFO {} org.testcontainers.DockerClientFactory - Docker host IP address is localhost
[main] INFO {} org.testcontainers.DockerClientFactory - Connected to docker:
Server Version: 27.4.0
API Version: 1.47
Operating System: Docker Desktop
Total Memory: 7937 MB
Labels:
com.docker.desktop.address=unix:///Users/jsyrjala/Library/Containers/com.docker.docker/Data/docker-cli.sock
[main] INFO {} tc.testcontainers/ryuk:0.11.0 - Creating container for image: testcontainers/ryuk:0.11.0
[main] INFO {} tc.testcontainers/ryuk:0.11.0 - Container testcontainers/ryuk:0.11.0 is starting: f8e0d523594a94297797c41dee8659f5ed132e53943adbc13c52b41e639692c1
[main] INFO {} tc.testcontainers/ryuk:0.11.0 - Container testcontainers/ryuk:0.11.0 started in PT3.304634S
[main] INFO {} org.testcontainers.utility.RyukResourceReaper - Ryuk started - will monitor and terminate Testcontainers containers on JVM exit
[main] INFO {} org.testcontainers.DockerClientFactory - Checking the system...
[main] INFO {} org.testcontainers.DockerClientFactory - ✔︎ Docker server version should be at least 1.6.0
[main] INFO {} tc.postgres:17 - Creating container for image: postgres:17
[main] INFO {} tc.postgres:17 - Container postgres:17 is starting: 1ef08c6b4e3ae037d1ab8437a5208c74db3499034b8d7b1e0a8e4d79c34a6686
[main] ERROR {} tc.postgres:17 - Could not start container
org.testcontainers.containers.ContainerLaunchException: Timed out waiting for log output matching '.*database system is ready to accept connections.*\s'
at org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy.waitUntilReady(LogMessageWaitStrategy.java:47) ~[testcontainers-1.20.4.jar:1.20.4]
at org.testcontainers.containers.wait.strategy.AbstractWaitStrategy.waitUntilReady(AbstractWaitStrategy.java:52) ~[testcontainers-1.20.4.jar:1.20.4]
at org.testcontainers.containers.PostgreSQLContainer.waitUntilContainerStarted(PostgreSQLContainer.java:149) ~[postgresql-1.20.4.jar:?]
at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:492) ~[testcontainers-1.20.4.jar:?]
at org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:346) ~[testcontainers-1.20.4.jar:?]
at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:81) [duct-tape-1.0.8.jar:?]
at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:336) [testcontainers-1.20.4.jar:?]
at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:322) [testcontainers-1.20.4.jar:?]
...
[main/:?]
[main] ERROR {} tc.postgres:17 - Log output from the failed container:
PostgreSQL Database directory appears to contain a database; Skipping initialization
2025-01-18 08:41:26.663 UTC [1] LOG: starting PostgreSQL 17.2 (Debian 17.2-1.pgdg120+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2025-01-18 08:41:26.664 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
2025-01-18 08:41:26.664 UTC [1] LOG: listening on IPv6 address "::", port 5432
2025-01-18 08:41:26.671 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2025-01-18 08:41:26.693 UTC [30] LOG: database system was interrupted; last known up at 2025-01-17 23:08:41 UTC
2025-01-18 08:41:26.695 UTC [30] LOG: database system was not properly shut down; automatic recovery in progress
2025-01-18 08:41:26.701 UTC [30] LOG: redo starts at 0/1982BC8
2025-01-18 08:41:26.701 UTC [30] LOG: invalid record length at 0/1982C00: expected at least 24, got 0
2025-01-18 08:41:26.701 UTC [30] LOG: redo done at 0/1982BC8 system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s
2025-01-18 08:41:26.718 UTC [28] LOG: checkpoint starting: end-of-recovery immediate wait
2025-01-18 08:41:26.725 UTC [28] LOG: checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.002 s, sync=0.001 s, total=0.015 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=0 kB; lsn=0/1982C00, redo lsn=0/1982C00
2025-01-18 08:41:26.733 UTC [1] LOG: database system is ready to accept connections
Exception in thread "main" org.testcontainers.containers.ContainerLaunchException: Container startup failed for image postgres:17
at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:351)
at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:322)
...
Caused by: org.rnorth.ducttape.RetryCountExceededException: Retry limit hit with exception
at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:88)
at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:336)
... 4 more
Caused by: org.testcontainers.containers.ContainerLaunchException: Could not create/start container
at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:556)
at org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:346)
at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:81)
... 5 more
Caused by: org.testcontainers.containers.ContainerLaunchException: Timed out waiting for log output matching '.*database system is ready to accept connections.*\s'
at org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy.waitUntilReady(LogMessageWaitStrategy.java:47)
at org.testcontainers.containers.wait.strategy.AbstractWaitStrategy.waitUntilReady(AbstractWaitStrategy.java:52)
at org.testcontainers.containers.PostgreSQLContainer.waitUntilContainerStarted(PostgreSQLContainer.java:149)
at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:492)
... 7 more
Подробнее здесь: https://stackoverflow.com/questions/793 ... postgresql
Хранение базы данных на диске в TestContainers и Postgresql. ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1737196882
Anonymous
Я хотел бы запустить TestContainers с модулем Postgres, чтобы Postgres сохранял данные на диск хоста. Мне бы хотелось, чтобы я мог запускать и останавливать тестовый контейнер, и данные, хранящиеся в базе данных, сохранялись бы при перезапусках.
При настройке по умолчанию я получаю пустую базу данных postgres каждый раз, когда запускается TestContainer.
Похоже, что запуск ожидает этой строки в системе базы данных, готовой принимать соединения журналы postgres. Кажется, этот журнал появляется, но только после сбоя.
Я попробовал следующее:
val container = PostgreSQLContainer("postgres:17")
.withDatabaseName("db-name")
.withUsername("username")
.withPassword("password")
.withFileSystemBind("/tmp/db", "/var/lib/postgresql/data", BindMode.READ_WRITE)
Это работает при первом запуске: образ запускается и работает, файлы базы данных создаются в /tmp/db. Однако при дальнейших стартах происходит следующее. Запуск занимает много времени, а затем происходит сбой.
[main] INFO {} org.testcontainers.images.PullPolicy - Image pull policy will be performed by: DefaultPullPolicy()
[main] INFO {} org.testcontainers.utility.ImageNameSubstitutor - Image name substitution will be performed by: DefaultImageNameSubstitutor (composite of 'ConfigurationFileImageNameSubstitutor' and 'PrefixingImageNameSubstitutor')
[main] INFO {} org.testcontainers.DockerClientFactory - Testcontainers version: 1.20.4
[main] INFO {} org.testcontainers.dockerclient.DockerClientProviderStrategy - Loaded org.testcontainers.dockerclient.UnixSocketClientProviderStrategy from ~/.testcontainers.properties, will try it first
[main] INFO {} org.testcontainers.dockerclient.DockerClientProviderStrategy - Found Docker environment with local Unix socket (unix:///var/run/docker.sock)
[main] INFO {} org.testcontainers.DockerClientFactory - Docker host IP address is localhost
[main] INFO {} org.testcontainers.DockerClientFactory - Connected to docker:
Server Version: 27.4.0
API Version: 1.47
Operating System: Docker Desktop
Total Memory: 7937 MB
Labels:
com.docker.desktop.address=unix:///Users/jsyrjala/Library/Containers/com.docker.docker/Data/docker-cli.sock
[main] INFO {} tc.testcontainers/ryuk:0.11.0 - Creating container for image: testcontainers/ryuk:0.11.0
[main] INFO {} tc.testcontainers/ryuk:0.11.0 - Container testcontainers/ryuk:0.11.0 is starting: f8e0d523594a94297797c41dee8659f5ed132e53943adbc13c52b41e639692c1
[main] INFO {} tc.testcontainers/ryuk:0.11.0 - Container testcontainers/ryuk:0.11.0 started in PT3.304634S
[main] INFO {} org.testcontainers.utility.RyukResourceReaper - Ryuk started - will monitor and terminate Testcontainers containers on JVM exit
[main] INFO {} org.testcontainers.DockerClientFactory - Checking the system...
[main] INFO {} org.testcontainers.DockerClientFactory - ✔︎ Docker server version should be at least 1.6.0
[main] INFO {} tc.postgres:17 - Creating container for image: postgres:17
[main] INFO {} tc.postgres:17 - Container postgres:17 is starting: 1ef08c6b4e3ae037d1ab8437a5208c74db3499034b8d7b1e0a8e4d79c34a6686
[main] ERROR {} tc.postgres:17 - Could not start container
org.testcontainers.containers.ContainerLaunchException: Timed out waiting for log output matching '.*database system is ready to accept connections.*\s'
at org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy.waitUntilReady(LogMessageWaitStrategy.java:47) ~[testcontainers-1.20.4.jar:1.20.4]
at org.testcontainers.containers.wait.strategy.AbstractWaitStrategy.waitUntilReady(AbstractWaitStrategy.java:52) ~[testcontainers-1.20.4.jar:1.20.4]
at org.testcontainers.containers.PostgreSQLContainer.waitUntilContainerStarted(PostgreSQLContainer.java:149) ~[postgresql-1.20.4.jar:?]
at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:492) ~[testcontainers-1.20.4.jar:?]
at org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:346) ~[testcontainers-1.20.4.jar:?]
at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:81) [duct-tape-1.0.8.jar:?]
at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:336) [testcontainers-1.20.4.jar:?]
at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:322) [testcontainers-1.20.4.jar:?]
...
[main/:?]
[main] ERROR {} tc.postgres:17 - Log output from the failed container:
PostgreSQL Database directory appears to contain a database; Skipping initialization
2025-01-18 08:41:26.663 UTC [1] LOG: starting PostgreSQL 17.2 (Debian 17.2-1.pgdg120+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
2025-01-18 08:41:26.664 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
2025-01-18 08:41:26.664 UTC [1] LOG: listening on IPv6 address "::", port 5432
2025-01-18 08:41:26.671 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2025-01-18 08:41:26.693 UTC [30] LOG: database system was interrupted; last known up at 2025-01-17 23:08:41 UTC
2025-01-18 08:41:26.695 UTC [30] LOG: database system was not properly shut down; automatic recovery in progress
2025-01-18 08:41:26.701 UTC [30] LOG: redo starts at 0/1982BC8
2025-01-18 08:41:26.701 UTC [30] LOG: invalid record length at 0/1982C00: expected at least 24, got 0
2025-01-18 08:41:26.701 UTC [30] LOG: redo done at 0/1982BC8 system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s
2025-01-18 08:41:26.718 UTC [28] LOG: checkpoint starting: end-of-recovery immediate wait
2025-01-18 08:41:26.725 UTC [28] LOG: checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.002 s, sync=0.001 s, total=0.015 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=0 kB; lsn=0/1982C00, redo lsn=0/1982C00
2025-01-18 08:41:26.733 UTC [1] LOG: database system is ready to accept connections
Exception in thread "main" org.testcontainers.containers.ContainerLaunchException: Container startup failed for image postgres:17
at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:351)
at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:322)
...
Caused by: org.rnorth.ducttape.RetryCountExceededException: Retry limit hit with exception
at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:88)
at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:336)
... 4 more
Caused by: org.testcontainers.containers.ContainerLaunchException: Could not create/start container
at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:556)
at org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:346)
at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:81)
... 5 more
Caused by: org.testcontainers.containers.ContainerLaunchException: Timed out waiting for log output matching '.*database system is ready to accept connections.*\s'
at org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy.waitUntilReady(LogMessageWaitStrategy.java:47)
at org.testcontainers.containers.wait.strategy.AbstractWaitStrategy.waitUntilReady(AbstractWaitStrategy.java:52)
at org.testcontainers.containers.PostgreSQLContainer.waitUntilContainerStarted(PostgreSQLContainer.java:149)
at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:492)
... 7 more
Подробнее здесь: [url]https://stackoverflow.com/questions/79364900/storing-database-to-host-disk-in-testcontainers-and-postgresql[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия