2017-04-06 2 views
0

Docker를 사용하여 마이크로 서비스 아키텍처를 준비하고 있습니다. docker-compose를 사용하여 한 컨테이너를 다른 컨테이너와 연결하려는 일부 문제에 직면하고 있습니다.Docker를 사용하여 Docker에서 컨테이너 연결 문제 -

기본적으로 저는 postgressql 이미지 컨테이너와 데이터베이스 컨테이너에 연결해야하는 스프링 부트로 개발 된 자바 마이크로 서비스를 가지고 있습니다.

그래서 고정 표시기 - compose.yml에서 링크를 설정하고 사용하는 'DB'로 DB 컨테이너 IP를 참조하고 있습니다 :

- "JAVA_OPTS=-Dpostgres.host=db"

그러나 내가 가진 microservice을 시작하는 다음과 같은 오류를 받고 있어요 고정 표시기 :

에 의해 발생 : java.lang.IllegalArgumentException가 : 값의 자리 표시 자 'postgress.host'을 확인할 수 없습니다 "JDBC : PostgreSQL의 : // $ {postgress.host} : 5432/고정 표시기"

기본적으로이 자리 표시자를 확인할 수는 없지만 일반적으로 고정 표시기로 작성하면이 시스템 변수를 db 컨테이너 IP 주소를 가리 키도록 설정해야합니다.

내가 뭘 잘못하고있어?

고정 표시기-compose.yml : 다음 microservice의

version: "2" 
services: 
    microservices: 
     build: ./microservices 
     container_name: microservices 
     links: 
     - db 
     - consul 
     environment: 
     - "JAVA_OPTS=-Dpostgres.host=db" 
    consul: 
     image: consul 
     container_name: consul 
     ports: 
       - "8500:8500" 
    db: 
    image: postgres 
    container_name: local-postgres9.6 
    ports: 
      - "5432:5432" 
    environment: 
     POSTGRES_PASSWORD: docker 
     POSTGRES_USER: docker 

application.yml :

server: 
    port: 8081 

project: 
    jdbc: 
    url: jdbc:postgresql://${postgres.host}:5432/docker 
    driver: org.postgresql.Driver 
    username: docker 
    password: docker 
+0

이것은 자리 표시자를 해결하지 못합니다.이 코드는 docker 및 docker-compose가 제공하는 DNS 해상도가 아닌 옵션을 선택하는 Java 코드입니다. – BMitch

+0

하지만 이것은 컨테이너를 서로 올바르게 연결하는 유일한 방법입니까? 내 말은, 여기서 일을하지 않는 사람은 시스템 변수를 올바른 값으로 설정하지 않아도 고정자를 작성하여 자리 표시자를 확인할 수 있다는 것입니다. 내가 원하는 걸 할 수있는 다른 방법? – fgonzalez

+0

환경 변수가 정의되지 않았습니까? "microservices"컨테이너 ID에'docker exec -i $ container_id env'를 시도하십시오. 환경 변수가 정의되면, 자바가 그것을 사용하지 않는다는 것이 문제이다. – BMitch

답변

0

${db.host} 시도는 documentation에 따라 :

포함 된 파일 아래

별칭과 동일한 호스트 이름 또는 별칭이 지정되지 않은 경우 서비스 이름에 연결된 서비스의 컨테이너에 연결할 수 있습니다.

+0

행운이지만 감사 합니다만, 나는 단지 JAVA_OPTS가 바람둥이 이미지를 사용할 때만 작동한다는 것을 발견했습니다. 제 경우 엔 임베디드 바람둥이가있는 springboot fat jar를 배포하고 있습니다. 그래서 시스템 변수가 설정되지 않은 이유 일 수 있습니다. – fgonzalez

관련 문제