티스토리 뷰

상황은 다음과 같다.

로컬 node환경에서 작업을하고 ORM으로는 sequlize를 사용한다.

DB만 docker에서 postgresql컨테이너를 만들고 sequlize로 연결하려고 하는데 계속 다음과 같은 오류가 떴다.

docker 컨테이너 생성은 다음과 같은 명령어로 했다.

docker run --rm \
--name docker-db \
-e POSTGRES_DB=test \
-e POSTGRES_USER=test \
-e POSTGRES_PASSWORD=test \
-p 5432:5432 \
postgres

컨테이너는 잘 생성되었고 docker exec --it docker-db bash 를 통해 컨테이너로 접속하고,

su - postgrespsql --username test --dbname test 를 통해 postgrdsql CLI인 psql로 접속하여 확인도 가능했다.

sequlize는 sequelize init 을 통해 초기화 하고 config.json 을 다음과 같이 수정했다.

"development": {
    "username": "test",
    "password": "test",
    "database": "test",
    "host": "test",
    "dialect": "postgres"
  },

이제 서버를 켜고 DB를 sync하려는데 계속 오류가 발생했다.

HostNotFoundError [SequelizeHostNotFoundError]: getaddrinfo ENOTFOUND docker-db
    at Client._connectionCallback (C:\Users\Park\Desktop\Server\node_modules\sequelize\lib\dialects\postgres\connection-manager.js:175:24)
    at Client._handleErrorWhileConnecting (C:\Users\Park\Desktop\Server\node_modules\pg\lib\client.js:305:19)
    at Client._handleErrorEvent (C:\Users\Park\Desktop\Server\node_modules\pg\lib\client.js:315:19)
    at Connection.emit (events.js:400:28)
    at Connection.emit (domain.js:470:12)
    at Socket.reportStreamError (C:\Users\Park\Desktop\Server\node_modules\pg\lib\connection.js:52:12)
    at Socket.emit (events.js:400:28)
    at Socket.emit (domain.js:470:12)
    at emitErrorNT (internal/streams/destroy.js:106:8)
    at emitErrorCloseNT (internal/streams/destroy.js:74:3) {
  parent: Error: getaddrinfo ENOTFOUND docker-db
      at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:69:26) {
    errno: -3008,
    code: 'ENOTFOUND',
    syscall: 'getaddrinfo',
    hostname: 'docker-db'
  },
  original: Error: getaddrinfo ENOTFOUND docker-db
      at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:69:26) {
    errno: -3008,
    code: 'ENOTFOUND',
    syscall: 'getaddrinfo',
    hostname: 'docker-db'
  }

구글링하다보니 깃헙에서 같은 이슈를 겪고있는 사람을 확인했고

config.json 을 다음과 같이 수정하니 DB연결이 성공적으로 되었다.

"development": {
    "username": "test",
    "password": "test",
    "database": "test",
    "host": "host.docker.internal",
    "dialect": "postgres"
  },

작업파일도 docker 이미지로 만들고 docker-compose를 이용한다면 이 방법이 필요 없을 수 있다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함