복붙노트

[SPRING] 도커가있는 스프링 부트가 요청 된 대상 오류에 대한 유효한 인증 경로를 찾을 수 없습니다.

SPRING

도커가있는 스프링 부트가 요청 된 대상 오류에 대한 유효한 인증 경로를 찾을 수 없습니다.

나는 스프링 부트를 사용 중이며 Docker로 설정하려고합니다. 나는 Google에서 찾을 수있는 모든 것을 시도했지만 아무 것도 나를 보내지 않는 것 같습니다. 나는 뛰고있어

 mvn clean package docker:build 

이것을 실행하면 스프링 부트 테스트가 수행되고 DB 마이그레이션을 실행하고 JAR을 빌드 한 다음 Docker 이미지 작성과 관련하여 다음 오류가 발생합니다.

Failed to execute goal com.spotify:docker-maven-plugin:0.4.9:build (default-cli) 
on project app: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: javax.net.ssl.SSLHandshakeException: 
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: 
unable to find valid certification path to requested target -> [Help 1]

다음은 사용중인 Dockerfile입니다.

FROM java:8-jdk
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/james/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
EXPOSE 8080
VOLUME /tmp
ADD app-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

그리고 여기에 내 docker-maven-plugin 설정이 있습니다 :

 ... pom stuff
<docker.image.prefix>jamesone1</docker.image.prefix>
    ... other pom stufff
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.4.9</version>
    <configuration>
            <dockerHost>https://192.168.99.100:2376</dockerHost>
            <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
            <dockerDirectory>src/main/docker</dockerDirectory>

            <resources>
                <resource>
                    <targetPath>/</targetPath>
                    <directory>${project.build.directory}</directory>
                    <include>${project.build.finalName}.jar</include>
                </resource>
            </resources>
    </configuration>
</plugin>

나는 dock을 mac 용으로 사용하고 있으며 docker-machine을 다음 env와 함께 사용하고 있습니다.

export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/james/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"

무슨 일이야?! 내가 놓친 게 있니?

해결법

  1. ==============================

    1.Windows 10에서 이것을 수정 :

    Windows 10에서 이것을 수정 :

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
                    <imageName>yourImageName</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <dockerHost>https://192.168.99.100:2376</dockerHost>
                    <dockerCertPath>/Users/your_user/.docker/machine/machines/default</dockerCertPath>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
    

    다음 두 가지 태그가 중요합니다.

    <dockerHost>https://192.168.99.100:2376</dockerHost>
    <dockerCertPath>/Users/your_user/.docker/machine/machines/default</dockerCertPath>
    

    나는 dockerfile을 사용하는데,이 경로는이 태그로 정의해야한다.

    <dockerDirectory>src/main/docker</dockerDirectory>  
    

    이제 다음을 통해 jar 파일을 만들고 docker 이미지를 생성 할 수 있습니다.

    mvn 패키지 도커 : 빌드

    나는 맥에서 다음과 같은 가치가 있다고 생각한다.

    <dockerCertPath>/Users/your_user/.docker/machine/machines/default</dockerCertPath>
    
  2. ==============================

    2.나는 플러그 접속 식없이 혼자서 고정물 이미지를 만드는 것을 끝내었다.

    나는 플러그 접속 식없이 혼자서 고정물 이미지를 만드는 것을 끝내었다.

    docker build -f Dockefile .
    

    그리고 Dockefile (이름이 변경됨) :

    FROM java:8-jdk
    EXPOSE 8080
    #VOLUME /tmp
    
    ADD target/app-0.0.1-SNAPSHOT.jar /opt/demo/app-0.0.1-SNAPSHOT.jar
    CMD ["java","-jar","/opt/demo/app-0.0.1-SNAPSHOT.jar"]
    

    다음과 같이 실행합니다.

     docker run <container id here>
    

    난 그냥 작동하도록 메이븐 플러그인을 얻을 수 없었다!

    게다가 나는 물건을 훨씬 더 간단하게 만드는 docker-compose.yml을 만들었습니다 !!!

    열려는 포트, dockerfile 위치와 같은 속성을 정의하고 docker-compose를 실행하면 마술로 docker 이미지를 작성 + 실행합니다!

    사용중인 docker-compose.yml의 예 :

    version: '2'
    services:
      web:
        build: .
        ports:
         - "8080:8080"
    

    빌드는 Dockerfile 위치를 참조합니다. * 같은 위치에 있으려면 Dockerfile + yml 파일이 필요할 수도 있습니다!

    포트는 내가 원하는 포트를 참조합니다. 이제 goto localhost : 8080을 사용하여 요청을 도커 컨테이너에 전달할 수 있습니다.

    도커 컨테이너에 대한 자세한 내용은 다음을 참조하십시오.

    https://docs.docker.com/compose/gettingstarted/

  3. from https://stackoverflow.com/questions/39240560/spring-boot-with-docker-unable-to-find-valid-certification-path-to-requested-tar by cc-by-sa and MIT license