얼마전 맥북을 한번 밀고
새롭게 업무 환경 세팅을 하던 중 docker 관련 에러가 하나 발생했다.
Springboot + TestContainers를 활용한 빌드 과정이었다.
Could not find a valid Docker environment. Please see logs and check configuration
java.lang.IllegalStateException: Could not find a valid Docker environment. Please see logs and check configuration
at org.testcontainers.dockerclient.DockerClientProviderStrategy.lambda$getFirstValidStrategy$7(DockerClientProviderStrategy.java:256)
at java.base/java.util.Optional.orElseThrow(Optional.java:403)
at org.testcontainers.dockerclient.DockerClientProviderStrategy.getFirstValidStrategy(DockerClientProviderStrategy.java:247)
at org.testcontainers.DockerClientFactory.getOrInitializeStrategy(DockerClientFactory.java:150)
at org.testcontainers.DockerClientFactory.client(DockerClientFactory.java:186)
at org.testcontainers.DockerClientFactory$1.getDockerClient(DockerClientFactory.java:104)
Could not find a valid Docker environment. Please see logs and check configuration 라는 에러가 떴다.
구글링해보니...
이는 MacOS 환경에서 발생할수 있는 에러이며
아래와 같이 심볼릭 링크를 추가해주면 해결된다.
sudo ln -s $HOME/.docker/run/docker.sock /var/run/docker.sock
그러고 나서 다시 빌드 실행.
이번에는 다른 에러가 떴다.
Testcontainer에서 이미지 pull 관련 에러가 발생했다.
Caused by: org.testcontainers.containers.ContainerFetchException: Can't get Docker image: RemoteDockerImage(imageName=mysql:8.0.24, imagePullPolicy=DefaultPullPolicy(), imageNameSubstitutor=org.testcontainers.utility.ImageNameSubstitutor$LogWrappedImageNameSubstitutor@4dc7cd1c)
at app//org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1371)
at app//org.testcontainers.containers.GenericContainer.logger(GenericContainer.java:651)
at app//org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:331)
... 75 more
Caused by: com.github.dockerjava.api.exception.NotFoundException: Status 404: {"message":"no matching manifest for linux/arm64/v8 in the manifest list entries: no match for platform in manifest: not found"}
Can't get Docker image: RemoteDockerImage... 원격 허브에서 이미지를 다운로드 받는데 실패 했다는 것이다.
그리고 조금 더 아래에
NotFoundException: Status 404: {"message":"no matching manifest for linux/arm64/v8... 가 보였다.
MacOS Apple Silicon 과 관련된 것인듯 하다.
(맥북 초보라 이런 에러를 최근 많이 접함... 😂)
아니나 다를까 사용하려는 이미지는 linux/arm64/v8 에 해당하는 도커 이미지를 지원하지 않았다.
아래와 같이 수동으로 이미지를 pull 해줬다.
docker pull --platform=linux/amd64 mysql:8.0.24
이 후, 다시 앱을 빌드하니 정상적으로 동작하였다.
(아마도 환경 세팅 구간에서 platform 값이 linux/arm64/v8로 캐싱되어 Testcontainers 실행 구간에서도 영향을 받은듯 하다.)
'개발 이야기 > Springboot' 카테고리의 다른 글
Springboot App 시작, 종료시 로직 실행 (0) | 2024.08.31 |
---|---|
Springboot 에서 Gzip으로 압축(with Kotlin) (0) | 2024.07.06 |
AWS S3 타계정의 버킷 업로드 시 BucketOwnerFullControl 설정 (0) | 2024.06.06 |
DTO에서 LocalDateTime 유효성 체크와 에러핸들링 방법 (1) | 2024.06.01 |
JdbcTemplate로 batchUpdate 사용해보기 (0) | 2024.05.28 |