[Docker] Docker PostgreSQL ์ฐ๊ฒฐ ๋ฌธ์ : localhost ๋ฐ์ธ๋ฉ ์ฐ์ ์์์ 'role postgres does not exist' ์ค๋ฅ ํด๊ฒฐ
Docker ๊ธฐ๋ฐ PostgreSQL ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ ์ค DataGrip์์ ์ฐ๊ฒฐ ํ ์คํธ ์ "[28000] FATAL: role 'postgres' does not exist" ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์๋์ ๊ฐ์ ๋ช ๋ น์ด๋ก Docker ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๋ฅผ ์คํํ๋ค.
PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ Docker ์ปจํ ์ด๋๋ก ์คํํ๋, ๋ฐ์ดํฐ๋ ํธ์คํธ ์์คํ ์ ๋ณผ๋ฅจ์ ์ ์ฅํ๊ณ , ํธ์คํธ์ 5432 ํฌํธ๋ฅผ ํตํด ์ปจํ ์ด๋์ ๋ด 5432 ํฌํธ์ ์ ๊ทผํ ์ ์๊ฒ ํ๋ค.
์ํ๋ ์ ์์ธ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
๋ค์์ผ๋ก Datagrip์์ Test Connection์ ์๋ํด ๋ณด์๋ค. ์๋์ ๊ฐ์ด [28000] FATAL: role 'postgres' does not exist ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ฐ์ ๋ฌธ์ ์ ์ปจํ ์ด๋์ ๋ก๊ทธ๋ฅผ ํ์ธํ์ฌ ๋ ์์ธํ ์ ๋ณด๋ฅผ ํ์ธํ๋ค.
์ฒ์์ ํฌํธ ์ถฉ๋๋ฌธ์ ๋ฅผ ์์ฌํ์ง๋ง ์ ๋ก๊ทธ ์์ผ๋ก๋ ๋ฌธ์ ๊ฐ ์์ด ๋ณด์ฌ ๋์ด๊ฐ๋ค.
[28000] FATAL: role 'postgres' does not exist ์ค๋ฅ๋ PostgreSQL์ 'postgres' ์ฌ์ฉ์๋ก ์ ์ํ๋ ค๊ณ ํ ๋ ํด๋น ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ์กด์ฌํ์ง ์์ ๋ ๋ฐ์ํ๋ค.
๋ค์ ์ฒ์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ ๋ช ๋ น์ด๋ฅผ ์ดํด๋ณด์๊ณ , ๋ถ๋ช ์ํผ ์ ์ ๋ฅผ postgres๋ก ์ค์ ํ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
๊ด๋ จ ์ค๋ฅ๋ฅผ ๊ฒช์ ์ฌ๋๋ค์ ๊ธ์ ์ฐพ์ ๋ณด๋ฉฐ username์ ๋ช ์์ ์ผ๋ก ์ง์ ํด ๋ณด๋ ์ต์ ์ ํฌํจํด์ ์คํํ๋ ๋ฑ ์ฌ๋ฌ ์๋๋ฅผ ํ์ง๋ง ํด๊ฒฐ๋์ง ์์๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ 1: ํฌํธ ๋งคํ ๋ณ๊ฒฝ
ํฌํธ ๋ฌธ์ ์ธ๊ฐ ์ถ์ด์ 5433:5432๋ก ํฌํธ๋ฅผ ๋งคํํด๋ณด์๋๋ ํ๋ฌดํ์ง๋ง ์ ์ ์ฐ๊ฒฐ์ด ๋์๋ค.
ํฌํธ ๋งคํ ๋ณ๊ฒฝํ ์ฐ๊ฒฐ์ ์ฑ๊ณตํ ๋ค์์์ผ ํ์ฌ 5432 ํฌํธ๋ฅผ ์ฌ์ฉ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ํ์ธํด ๋ณด์๋ค.
- ์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ ์ค: ๋์ผํ PostgreSQL ํ๋ก์ธ์ค(PID 1701)๊ฐ IPv6์ IPv4 ๊ฐ๊ฐ์์ localhost(5432 ํฌํธ)์์ LISTEN ์ํ์ด๋ค.
- ์ธ ๋ฒ์งธ ์ค: Docker ๊ด๋ จ ํ๋ก์ธ์ค(com.docke, PID 82303)๊ฐ ๋ชจ๋ ์ธํฐํ์ด์ค(*)์์ LISTEN ์ํ์ด๋ค.
์๋๊ธ๋ถํฐ"Homebrew PostgreSQL"๊ณผ "ํธ์คํธ PostgreSQL"๋ก ๋จ์ด๋ฅผ ํผ์ฉํด ์ฌ์ฉํ๊ณ ์๋๋ฐ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์ง์นญํ๊ณ ์๋ค๋ ์ ์ ์ธ๊ธํ๊ณ ๋ค์์ผ๋ก ๋์ด๊ฐ๊ฒ ๋ค.
์๋ฌธ: localhost์ ๋ชจ๋ ์ธํฐํ์ด์ค(*)์์ ๋์ผ ํฌํธ๊ฐ ์ด๋ ค ์์ด๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
์ปค๋์ ๋ฐ์ธ๋ฉ์์๋ ํน์ IP์ ๋ช ์์ ์ผ๋ก ๋ฐ์ธ๋ฉ๋ ์์ผ์ 0.0.0.0(*) ๋ฐ์ธ๋ฉ๋ณด๋ค ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ค. ๋๋ฌธ์ ํด๋น ๊ฒฝ์ฐ lostcalhost:postgresql(127.0.0.1:5432)๋ก์ ์ฐ๊ฒฐ ์๋๋ ํญ์ IP๊ฐ localhost ๋ช ์์ ์ผ๋ก ๋ฐ์ธ๋ฉ๋ Homebrew PostgreSQL๋ก ๋ผ์ฐํ ๋๋ค.
์๋์ ๊ฐ์ด ๊ฐ๋จํ ํ๋ฆ์ผ๋ก ํด๋น ์ํฉ์ ์ ๋ฆฌํด ๋ณด์๋ค.
๋คํธ์ํฌ ํธ๋ํฝ ํ๋ฆ
1. ํด๋ผ์ด์ธํธ -> localhost:5432
2. ์ปค๋ ๋ฃจํ๋ฐฑ ๋๋ผ์ด๋ฒ -> Homebrew PostgreSQL
* Docker ์ปจํ ์ด๋๋ *:5432์์ ๋๊ธฐ ์ค์ด์ง๋ง localhost ํธ๋ํฝ์ ๊ฐ๋ก์ฑ ์ ์์๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด Datagrip์์ localhost๊ฐ ์๋ ๋ค๋ฅธ ip๋ก ์ ์์ ์๋ํ๋ฉด Docker ์ปจํ ์ด๋ Postgresql๋ก ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํด์ง๊น ๊ถ๊ธํด์ ธ ์๋ํด ๋ณด์๋ค.
en0 ์ธํฐํ์ด์ค์ ํ ๋น๋ ๋ก์ปฌ IP ์ฃผ์๋ฅผ ์ด์ฉํด ์ฐ๊ฒฐ์ ์๋ํด ๋ณด์.
Host๋ฅผ ๋ก์ปฌ IP ์ฃผ์๋ก ํ ๋ค user๋ postgres๋ก ์ค์ ํ๊ณ ์ฐ๊ฒฐ์ ํ ์คํธํ๋ ์๋์ ๊ฐ์ด Docker ์ปจํ ์ด๋ PostgreSQL์ ์ฐ๊ฒฐ์ ์ฑ๊ณตํ ์ ์๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
์ ๋ ์ํฉ์ ๋ค์ ์ ๋ฆฌํด ๋ณด์.
localhost:5432๋ก ์ ์ ์
1. ํด๋ผ์ด์ธํธ ์์ฒญ → localhost:5432
2. ์ปค๋์ ๋ฐ์ธ๋ฉ ์ฐ์ ์์์ ๋ฐ๋ผ localhost์ ๋ช ์์ ์ผ๋ก ๋ฐ์ธ๋ฉ๋ ํ๋ก์ธ์ค๋ก ๋ผ์ฐํ
3. Homebrew PostgreSQL์ด ์์ฒญ ์ฒ๋ฆฌ (Docker ์ปจํ ์ด๋๋ ๋ฌด์๋จ)
๋ก์ปฌ ๋คํธ์ํฌ IP:5432๋ก ์ ์ ์
1. ํด๋ผ์ด์ธํธ ์์ฒญ → 192.168.x.x:5432 (๋ก์ปฌ IP)
2. ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ํตํด *(๋ชจ๋ ์ธํฐํ์ด์ค)์ ๋ฐ์ธ๋ฉ๋ ํ๋ก์ธ์ค๋ก ๋ผ์ฐํ
3. Docker ์ปจํ ์ด๋์ PostgreSQL์ด ์์ฒญ ์ฒ๋ฆฌ
ํด๊ฒฐ ๋ฐฉ๋ฒ 2: ํธ์คํธ PostgreSQL ์ค์ง
"[28000] fatal: role 'postgres' does not exist" ์ค๋ฅ ์์ธ์ ํธ์คํธ์ ํด๋น Docker ์ปจํ ์ด๋ ๋ชจ๋ 5432 ํฌํธ๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง, DataGrip์ Homebrew PostgreSQL ์ธ์คํด์ค์ ์ฐ๊ฒฐํ๋ ค๊ณ ์๋ํ๋ ค ํ๊ธฐ ๋๋ฌธ์ด๋ค.
Homebrew๋ก ์ค์น๋ PostgreSQL์์ ์กด์ฌํ๋ ์ญํ (role) ๋ชฉ๋ก์ ํ์ธํด ๋ณด์.
Role name์ 'postgres'๊ฐ ์กด์ฌํ์ง ์์๋ค. ๋๋ฌธ์ "[28000] fatal: role 'postgres' does not exist"๋ผ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
Homebrew Postgresql์ ์กด์ฌํ๋ Role name์ผ๋ก 5432 ํฌํธ์ ๋ํด test connection์ ์ฐ๊ฒฐ์ ์๋ํด ๋ณด์.
discodeit_user๋ก user ๋ช ์ ๋ณ๊ฒฝํ๊ณ ๋ค์ ์๋ํด ๋ณด๋ ์๋์ ๊ฐ์ด ์ฐ๊ฒฐ์ ์ฑ๊ณตํจ์ ํ์ธํ ์ ์์๋ค.
์ด์ ๋ฌธ์ ์ ์์ธ์ ํ์ ํ์ผ๋ ๋ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก ํธ์คํธ PostgreSQL์ ์ค์งํ ๋ค ์ฐ๊ฒฐ์ ํ ์คํธํด๋ณด์.
ํธ์คํธ์์ ์คํ ์ค์ธ Homebrew PostgreSQL ์๋น์ค๋ฅผ ์ค์งํ๊ณ 5432:5432 ํฌํธ, user๋ postgres๋ก ์ฐ๊ฒฐ์ ์๋ํด ๋ดค๊ณ , ์ ์์ ์ผ๋ก test connection์ ์ฑ๊ณตํ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
์ ๋ฆฌ
- ๋คํธ์ํฌ ๋ฐ์ธ๋ฉ ์ฐ์ ์์
- ๋์ผํ ํฌํธ์์ ๊ตฌ์ฒด์ ์ธ ๋ฐ์ธ๋ฉ(localhost)์ด ์ผ๋ฐ์ ์ธ ๋ฐ์ธ๋ฉ(*)๋ณด๋ค ์ฐ์ ์ ๋๋ค.
- ํฌํธ ํ์ธ
- lsof -i :ํฌํธ๋ฒํธ๋ก ๋์ผ ํฌํธ๋ฒํธ์ ํ ๋น๋ ํ๋ก์ธ์ค๋ค์ ํ์ ํ์.
- ์๋ฌ ๋ฉ์์ง๊ฐ ์ค์ ์์ธ๊ณผ ์ง๊ฒฐ๋์ง ์์ ์๋ ์๋ค.
- Docker ์ปจํ
์ด๋์ ํธ์คํธ ์๋น์ค ๊ฐ ์ํธ์์ฉ
- ๊ฐ์ ํฌํธ๋ฅผ ์ฌ์ฉํด๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ๋ค๋ฅธ ์๋น์ค๋ก ์ฐ๊ฒฐ๋๋ค.
์ฐธ๊ณ ์๋ฃ:
https://seosh817.tistory.com/373
[Docker] ๋์ปค ๋คํธ์ํฌ ์ดํดํ๊ธฐ
์ด๋ฒ ํฌ์คํธ์์๋ ๋์ปค ๋คํธ์ํฌ์ ๋ํด ์ ๋ฆฌํ๊ฒ ์ต๋๋ค. ๋์ปค ๋คํธ์ํฌ ๊ตฌ์กฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ปค๋ฅผ ํธ์คํธ ์ด์์ฒด์ ์ ์ค์นํ๋ฉด ์ฌ๋ฌ๊ฐ์ง ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๋ค์ด ์ค์น๋๋ฉฐ IP ์ฃผ์๋ฅผ ์์ฐจ์ ์ผ
seosh817.tistory.com
https://onthegoalways.com/blog/port-sharing-os-and-docker/
https://www.baeldung.com/linux/socket-options-differencep
https://docs.docker.com/engine/network/packet-filtering-firewalls/
Packet filtering and firewalls
How Docker works with packet filtering, iptables, and firewalls
docs.docker.com
Still confused why docker works when you make a process listen to 0.0.0.0 but not 127.0.0.1
const hostname = '0.0.0.0'; // << This is where I'm confused const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 't...
serverfault.com