-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Docker API with Spring Boot
docker java client와 docker engine 이용
왜 Local 환경에서 컨테이너 이미지를 만들고, AWS ECR로 Push하는 전략을 구상했는가?
- AWS CodeBuilder를 이용하면 편하겠지만 비용적인 측면에서 부담된다.
https://hkemon.medium.com/docker-api-with-spring-boot-5c3d644fe8cd
Unsupported protocol scheme: npipe:////./pipe/docker_engine 오류
Windows 환경에서 DocekrClient가 native 파이프(npip) 프로토콜을 사용해서 Docker Daemon에 접근하는 경우 생기는 오류이다.
docker-java 라이브러리는 Windows npip를 지원하므로 DOCKER_HOST 환경 변수를 설정하지 않고 기본값으로 사용한다.
-
환경변수
DOCKER_HOST확인하기set DOCKER_HOST=npipe://./pipe/docker_engine or set DOCKER_HOST=tcp://localhost:2375
환경설정의 문제는 아닌거 같다. WSL2에서 해당 환경 변수를 설정해줘서 똑같이 오류가 뜬다..
-
Windows 10 docker 버전에서 발생하는
DockerClient초기화 오류이다.접속을 못하는건데, ver 2.0.0.3(31259) 이상에서 다음과 같이 해결할 수 있다.
- Docker Desktop Setting - General -
Expose daemon on tcp://localhost:2375 without TLS설정- legacy clients connect to the daemon. it also makes yourself vulnerable to remote code execution attacks.
- Docker Desktop Setting - General -
-
Configuration에서
DefaultDockerClientConfig를 설정해주자.DefaultDockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder() .withDockerHost("tcp://localhost:2375") .withDockerTlsVerify(false) .build();
각고의 노력 끝에 성공했다. 역시 기도가 부족했던 탓이다.
return DockerClientBuilder.getInstance(config)
.withDockerHttpClient(new OkDockerHttpClient.Builder()
.dockerHost(config.getDockerHost())
.build())
.build();
}DockerHttpClient를 명시적으로 표시하지 않아서 클래스 로드 오류가 났던 것으로, OkDockerHttpClient를 Builder를 통해 생성해주니 잘 접속된다.
테스트를 위해 Dockerfile이 존재하는 애플리케이션의 레포지토리가 필요했고, 예전에 작업하던 프로젝트를 잠깐 가져왔다.
https://github.com/downfa11/market-service
먼저 JGit 라이브러리를 이용해서 Git Clone을 진행해서 파일을 가져온 뒤, Docker Image 빌드 후 디렉토리 내의 프로젝트들을 삭제하는 프로세스이다.
접속한 김에 현재 로컬 Docker Daemon에 있는 이미지 목록도 출력했는데 market-service가 제대로 빌드된 것을 확인할 수 있다.

