-
[Docker | 도커] Database 연결 실패할 때카테고리 없음 2023. 7. 24. 16:49
상황 : GCP VM instance 내에서 도커를 통해 개발한것을 배포하고, 이것과 연결된 DB는 GCP SQL을 사용.
에러 : VM은 떠있고, 뚫어준 포트도 listen 상태이며 도커도 컨테이너 생성까지 다 되었는데 SQL접속이 안된다.
<커뮤니티에 질문했다가 지운 내용>
도커내에 있는 DB에 연결할 때와 현재 GCP에 있는 SQL에 연결할 때 모두 동일한 에러가 뜹니다.
docker build와 docker up -d까지 모두성공적인 것처럼 보여서 로그를 찍어보면 이런 에러 로그가 있고, 외부 ip접속도 안되는 상황입니다.
- docker build와 docker up -d 실행시
- docker-compose -f docker-compose.prod.yaml logs -f 로 로그 확인
3. 위 명령어는 모두 docker-compose.prod.yaml이 위치한 디렉토리에서 실행하고 있으며, 저의 docker-compose.prod.yaml는 아래형태입니다.
4. 제 .env.prod는 아래와 같습니다.여기서 HOST는 GCP SQL에서 생성한 인스턴스의 publid IP 주소이며, 방화벽도 0.0.0.0/0으로 뚫려있습니다.
5. .env.prod에 접속 정보도 정확히 들어있습니다.
6. SQL username과 password도 맞게 적어준것 같은데 해당 에러가 계속 발생하네요.
7. docker ps를 통해서 떠있나 확인도 했는데 떠있습니다.
원인 :
1. 실행경로 오류
내가 docker를 build하고 실행하고 있는 위치랑 실제 돌려야하는 파일 위치랑 같은 경로에 있지 않았다. 그러다보니 dockerfile은 계속 기본 index.js를 실행시키고 있었고, 나는 한단계 아래에 있는 디렉토리내에 다른 파일을 실행하고자 했다. 그 파일이 내가 의도하는 DB랑 연결되어있었고. 그래서 내가 실행시키고자 하는 파일들이 있는 디렉토리로 다 이사를 시켜줬다.
(이동시킨 파일들 :
docker-compose.prod.yaml,
.env.prod,
.dockerignore,
Dockerfile
위 두개가 도커 설정과 관련된 애들이라 각자 개발 환경에 맞춰 파일명이 다를 수 있다)
2. node 버전
경로를 맞게 한 뒤에도 문제가 생겼다. 바로 node 버전 때문에 생기는 에러인데, 내가 로컬에서는 node version 18대를 사용하고 있었는데, 실제로 dockerfile에서는 (docker build할 때 정의되는 버전)은
# 1. 운영체제 및 프로그램 설치(이미 리눅스/nodejs/npm/yarn까지 모두 깔려있는 컴퓨터 다운로드하는 방식) FROM node:14 # 2. 내 컴퓨터에 있는 폴더나 파일을 도커 컴퓨터 안으로 복사하기 # RUN mkdir myfolder => COPY할 때 해당 경로가 없으면 자동으로 만들어주기 때문에 따로 mkdir 명령어를 실행시킬 필요없다. COPY ./package.json /myfolder/ #yarn.lock > 버전정보를 가지고 있음 COPY ./yarn.lock /myfolder/ WORKDIR /myfolder/ RUN yarn install COPY . /myfolder/ # 3. 도커 안에서 index.js 실행하기 CMD yarn start:dev
위와 같이 node:14로 되어있었다.
그런데 내가 실행하고자 하는것들은 node 16이상에서만 돌기 때문에 버전을 16/ 혹은 그 이상의 18로 변경해서 실행하면 돌았다. 나는 18로 실행했다.
이런데도 애매하게 안되었어서 node_modules, yarn.lock , package-lock.json을 모두 다 지운 뒤 다시 실행했다.
node_modules >> yarn install 로 재설치
yarn.lock은 위 명령을 yarn으로 실행하면서 생성되었고, package-lock.json은 이 과정에서 필요가 없다.
그 와중에 git push/pull도 잘 안되어가지고.. 애를 먹었다. (토큰 문제)
Git 잘 안될 때 여기에 매달리지말고 일단 git remote remove origin & git remote add <깃주소> 로 편법을 쓴 다음에 내가 테스트하고하자는걸 먼저 해결하자.
반응형