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
이것은 자리 표시자를 해결하지 못합니다.이 코드는 docker 및 docker-compose가 제공하는 DNS 해상도가 아닌 옵션을 선택하는 Java 코드입니다. – BMitch
하지만 이것은 컨테이너를 서로 올바르게 연결하는 유일한 방법입니까? 내 말은, 여기서 일을하지 않는 사람은 시스템 변수를 올바른 값으로 설정하지 않아도 고정자를 작성하여 자리 표시자를 확인할 수 있다는 것입니다. 내가 원하는 걸 할 수있는 다른 방법? – fgonzalez
환경 변수가 정의되지 않았습니까? "microservices"컨테이너 ID에'docker exec -i $ container_id env'를 시도하십시오. 환경 변수가 정의되면, 자바가 그것을 사용하지 않는다는 것이 문제이다. – BMitch