-
토이 프로젝트를 구성하면서 도커에 각각의 컨테이너를 생성해 띄우고, 이들을 연결시킬 일이 있었다.
dockerFile이나 docker-compose로 한 번에 설정하는 방법이 있지만 이번엔 하나하나 해보기로 했다.1. 네트워크를 생성해 본다.
docker network create [네트워크명]
2. 컨테이너에 네트워크를 연결한다. (컨테이너 생성방법은 생략)
- 컨테이너 실행시 네트워크 추가
--network [네트워크명]
- 실행중인 컨테이너를 네트워크의 멤버로 끼워주는 방법
docker network connect [옵션] [네트워크명] [컨테이너 name/id]
3. 연결이 잘 되었는지 확인하고 싶다면 ping 명령어를 날려 보기
ping [컨테이너 name/id]
(ping이 설치되지 않았을 수도 있다._)
- ping 설치하기
apt update apt-get install iputils-ping
🌿 네트워크 연결은 잘 되었는데 애플리케이션 실행 시 database connection 오류발생
나는 데이터베이스 연결 시 호스트명 오류 때문에 발생했다.
localhost가 컨테이너 안에서는 host.docker.internal이 된다.
같은 네트워크 상에 있는 친구들은 이름으로 구분할 수 있다.
- 기존 application.yml
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/projectnm username: ${DATABASE_USERNAME} password: ${DATABASE_PASSWORD} # Redis redis: host: localhost port: 6379
- 변경 application.yml
localhost를 컨테이너의 호스트명으로 바꾸어 주었다. (mysql과 myredis라고 지었습니다.)
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://mysql:3306/projectnm username: ${DATABASE_USERNAME} password: ${DATABASE_PASSWORD} # Redis redis: host: myredis port: 6379
작동이 된다.
참고) 안된다면 시도해 볼 방법
컨테이너 실행 시 옵션을 추가하여 호스트를 추가해 준다.
--add-host=host.docker.internal:host-gateway
아니면 다른 방식도 있다.
https://bluese05.tistory.com/38
도커 네트워킹 참고
https://docs.docker.com/desktop/networking/
기존과 변경된 application.yml을 둘다 쓰고 싶으면 profile 설정을 해줄 수 있다.
(운영과 개발, 로컬 설정 파일을 분리하는 방법)
'도커_젠킨스' 카테고리의 다른 글
docker mysql 타임존 설정하기 (0) 2024.12.26 batch(스프링과 젠킨스) (0) 2022.08.22 댓글