Testcontainer Error Container startup failed for image docker/compose

itbuddy·2024년 8월 31일

꿀팁

목록 보기
6/12

환경

mac M3 Pro

에러 메시지

이에러 메시지만 봐서는 무엇이 원인인지 잘 모르겠다.

org.testcontainers.containers.ContainerLaunchException: Container startup failed for image docker/compose:1.29.2

더 위의 로그

2024-08-31T19:43:15.086+09:00  INFO 78165 --- [coffee-shop] [           main] tc.docker/compose:1.29.2                 : Copying all files in /Users/itbuddy/github/coffee-shop/src/test/resources into the container
2024-08-31T19:43:15.087+09:00  INFO 78165 --- [coffee-shop] [           main] tc.docker/compose:1.29.2                 : Creating container for image: docker/compose:1.29.2
2024-08-31T19:43:15.521+09:00  INFO 78165 --- [coffee-shop] [           main] tc.docker/compose:1.29.2                 : Container docker/compose:1.29.2 is starting: 22a178f3a509627cb3bf19e5cb2be43909e314f72adad8ea5e49de8f7bf8a709
2024-08-31T19:43:15.679+09:00  WARN 78165 --- [coffee-shop] [           main] tc.docker/compose:1.29.2                 : The architecture 'amd64' for image 'docker/compose:1.29.2' (ID sha256:32d8a4638cd83922fdd94cadf4f1850b595d29757488c73adf05f4b99ebd1318) does not match the Docker server architecture 'arm64'. This will cause the container to execute much more slowly due to emulation and may lead to timeout failures.
2024-08-31T19:43:16.890+09:00 ERROR 78165 --- [coffee-shop] [           main] tc.docker/compose:1.29.2                 : Could not start container

java.lang.IllegalStateException: Container did not start correctly.
	at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:495) ~[testcontainers-1.20.1.jar:1.20.1]
	at org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:354) ~[testcontainers-1.20.1.jar:1.20.1]
	at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:81) ~[duct-tape-1.0.8.jar:na]
	at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:344) ~[testcontainers-1.20.1.jar:1.20.1]
	at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:330) ~[testcontainers-1.20.1.jar:1.20.1]
	at org.testcontainers.containers.ContainerisedDockerCompose.invoke(ContainerisedDockerCompose.java:84) ~[testcontainers-1.20.1.jar:1.20.1]
	at org.testcontainers.containers.ComposeDelegate.runWithCompose(ComposeDelegate.java:241) ~[testcontainers-1.20.1.jar:1.20.1]
	at org.testcontainers.containers.ComposeDelegate.createServices(ComposeDelegate.java:163) ~[testcontainers-1.20.1.jar:1.20.1]
	at org.testcontainers.containers.DockerComposeContainer.start(DockerComposeContainer.java:139) ~[testcontainers-1.20.1.jar:1.20.1]
	at org.itbuddy.coffeeshop.config.TestContainerConfig.beforeAll(TestContainerConfig.java:34) ~[classes/:na]
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeBeforeAllCallbacks$12(ClassBasedTestDescriptor.java:396) ~[junit-jupiter-engine-5.10.2.jar:5.10.2]
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeBeforeAllCallbacks(ClassBasedTestDescriptor.java:396) ~[junit-jupiter-engine-5.10.2.jar:5.10.2]
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:212) ~[junit-jupiter-engine-5.10.2.jar:5.10.2]
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:85) ~[junit-jupiter-engine-5.10.2.jar:5.10.2]
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:148) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) ~[na:na]
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.2.jar:1.10.2]
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198) ~[junit-platform-launcher-1.10.2.jar:1.10.2]
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169) ~[junit-platform-launcher-1.10.2.jar:1.10.2]
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93) ~[junit-platform-launcher-1.10.2.jar:1.10.2]
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58) ~[junit-platform-launcher-1.10.2.jar:1.10.2]
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141) ~[junit-platform-launcher-1.10.2.jar:1.10.2]
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57) ~[junit-platform-launcher-1.10.2.jar:1.10.2]
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103) ~[junit-platform-launcher-1.10.2.jar:1.10.2]
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85) ~[junit-platform-launcher-1.10.2.jar:1.10.2]
	at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47) ~[junit-platform-launcher-1.10.2.jar:1.10.2]
	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:63) ~[junit-platform-launcher-1.10.2.jar:1.10.2]
	at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) ~[junit5-rt.jar:na]
	at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) ~[junit-rt.jar:na]
	at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) ~[idea_rt.jar:na]
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) ~[junit-rt.jar:na]
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) ~[junit-rt.jar:na]
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) ~[junit-rt.jar:na]

2024-08-31T19:43:16.924+09:00 ERROR 78165 --- [coffee-shop] [           main] tc.docker/compose:1.29.2                 : Log output from the failed container:
Creating network "vlvcmearl8e1_default" with the default driver
could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network


org.testcontainers.containers.ContainerLaunchException: Container startup failed for image docker/compose:1.29.2

	at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:359)

에러 메시지 위로 testconatiner가 어떤 작업을 했는지 올라가보자

tc.docker/compose 이미지를 구동중에 오류라는 것을 다시 한번 확인...

2024-08-31T19:43:15.679+09:00 WARN 78165 --- [coffee-shop][ main] tc.docker/compose:1.29.2 : The architecture 'amd64' for image 'docker/compose:1.29.2' (ID sha256:32d8a4638cd83922fdd94cadf4f1850b595d29757488c73adf05f4b99ebd1318) does not match the Docker server architecture 'arm64'. This will cause the container to execute much more slowly due to emulation and may lead to timeout failures.
2024-08-31T19:43:16.890+09:00 ERROR 78165 --- [coffee-shop][ main] tc.docker/compose:1.29.2 : Could not start container

왜 구동중에 문제가 생길까? 좀 내려가보자

2024-08-31T19:43:16.924+09:00 ERROR 78165 --- [coffee-shop][ main] tc.docker/compose:1.29.2 : Log output from the failed container:
Creating network "vlvcmearl8e1_default" with the default driver
could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network

기본 드라이버를 사용하여 "vlvcmearl8e1_default" 네트워크 생성
네트워크에 할당할 기본값 중에서 사용 가능하고 겹치지 않는 IPv4 주소 풀을 찾을 수 없습니다. 라고 한다.

겹치지 않는 IPv4 주소 풀을 찾을 수 없습니다 라는 뜻은
이미 생성된 network가 많아서 겹치지 않는 주소를 만들수 없다는 뜻 같다.
다음 명령어로 docker network list 를 확인해보자

$ docker network list
NETWORK ID     NAME                   DRIVER    SCOPE
3cad47741a0b   1lafulpwifvs_default   bridge    local
099ef7be0485   2nndcv4gjvjz_default   bridge    local
6f195559f497   3c5irn9rsnec_default   bridge    local
7889d372feea   3kclaerhgslu_default   bridge    local
918fb06af466   4qrelmgnplin_default   bridge    local
9e97e9894101   a8zq7zhzpnah_default   bridge    local
8f21e7a1623a   bridge                 bridge    local
4d51f2b73867   cfcwcxxd75bw_default   bridge    local
1f08fc391665   crzymqg87n5w_default   bridge    local
eae104ce3688   czbxqk4pbhdh_default   bridge    local
d168b3b4cae6   dpsyqq44gh69_default   bridge    local
b69c583d2ba3   dvgumvqdlw8g_default   bridge    local
a2e22a335635   e13xqx3svduv_default   bridge    local
d996f3d82f87   egoyrez8vupe_default   bridge    local
dfa5e6b39925   gqbouwp6piab_default   bridge    local
f588659715d4   gqomwad1coru_default   bridge    local
ad7511a50498   grafana-git_default    bridge    local
2d3aaa6195f4   h6mpgzxrpsxm_default   bridge    local
6c9411d42c27   host                   host      local
1511fe4aa9ba   hqpry9mxkqfj_default   bridge    local
a0b786737a77   idqybf1vvrf1_default   bridge    local
319d134ef6b5   igojuzx4n678_default   bridge    local
9f252bb41ccb   jloky6twszno_default   bridge    local
2376235111c4   k2cbdx4wirue_default   bridge    local
c2abe233a96f   kvcwrvs9tpvm_default   bridge    local
39b5c4f0b342   kxh3oczg4ndm_default   bridge    local
31360e4475ad   l83u8svcjjvz_default   bridge    local
4382c4f93e93   lcagxfi4r5zz_default   bridge    local
e8bb96552dd4   m7w5pd4jspzz_default   bridge    local
154d122aa953   minikube               bridge    local
ec90b7605124   mkpvaef8tphe_default   bridge    local
529da8c6a6df   mww16mfbtpgy_default   bridge    local
cd51b40c9f2f   mysql-study_default    bridge    local
d6f08aad2bb9   nb4obzsvbwnc_default   bridge    local
8fdf65415bd8   none                   null      local
c5fce13745c5   putoy7wdxgmy_default   bridge    local
b95e7a226f0c   qblpkqkofim2_default   bridge    local
647400f7319b   qtjufhqazywy_default   bridge    local
420c7e18b100   rczkncggv6qa_default   bridge    local
c8d4116185f1   s41ahvm7xxhg_default   bridge    local
180b029e6adc   sb4hc1bqgvpc_default   bridge    local
a17288d2098f   stg_default            bridge    local
51cc8b1210a2   tqy65y84ufup_default   bridge    local
12f0a42c44c4   us4ett3ee541_default   bridge    local
4f33470150f3   vdgivk4vj7bs_default   bridge    local
65a2c2917181   xmbqgvt2asxj_default   bridge    local
4bc6e103c8dd   xrtjkt6dctju_default   bridge    local
634ed83fe602   zulauarvyb84_default   bridge    local


충격... ㅋㅋㅋ

testconatiner를 비정상적으로 중지한적이 많다 보니 network가 정리되지 않고 남은것 같다.
사용하지 않는 네트워크를 삭제해보자.

해결 방법

docker network prune 명령어를 통해 사용하지 않는 docker network를 삭제하자

$ docker network prune
WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Networks:
nb4obzsvbwnc_default
sb4hc1bqgvpc_default
crzymqg87n5w_default
4qrelmgnplin_default
idqybf1vvrf1_default
stg_default
mysql-study_default
us4ett3ee541_default
hqpry9mxkqfj_default
l83u8svcjjvz_default
gqomwad1coru_default
mww16mfbtpgy_default
qblpkqkofim2_default
kvcwrvs9tpvm_default
putoy7wdxgmy_default
2nndcv4gjvjz_default
h6mpgzxrpsxm_default
kxh3oczg4ndm_default
tqy65y84ufup_default
m7w5pd4jspzz_default
a8zq7zhzpnah_default
dpsyqq44gh69_default
qtjufhqazywy_default
mkpvaef8tphe_default
cfcwcxxd75bw_default
1lafulpwifvs_default
k2cbdx4wirue_default
vdgivk4vj7bs_default
3kclaerhgslu_default
jloky6twszno_default
dvgumvqdlw8g_default
minikube
grafana-git_default
rczkncggv6qa_default
xrtjkt6dctju_default
s41ahvm7xxhg_default
egoyrez8vupe_default
lcagxfi4r5zz_default
xmbqgvt2asxj_default
zulauarvyb84_default
e13xqx3svduv_default
igojuzx4n678_default
3c5irn9rsnec_default
gqbouwp6piab_default
czbxqk4pbhdh_default

$ docker network list
NETWORK ID     NAME      DRIVER    SCOPE
8f21e7a1623a   bridge    bridge    local
6c9411d42c27   host      host      local
8fdf65415bd8   none      null      local

깔끔해졌다. :)

testcontainer도 잘 돌아가서 모든 테스트가 통과하였다.

결국 Docker 관리를 소홀히 한탓

주기 적으로 docker network prune 명령어를 사용해야 겠다.

profile
프론트도 조금 아는 짱구 같은 서버 프로그래머

0개의 댓글