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 network prune 명령어를 사용해야 겠다.