🐥

DockerでPostgreに接続できなかった時に確認したこと

2024/11/16に公開

この記事について

Go + PostgreSQLの環境構築をDockerで行っていたところDBのコンテナへの接続で詰まってしまったため調査しました。

エラー内容

goのコンテナ内でgo run main.goを実行しても以下のエラーが発生していました。

2024/11/16 08:00:09 dial tcp 127.0.0.1:5432: connect: connection refused
exit status 1

前提

設定は以下の通りです。最低限の設定です。

docker-compose.yml

db:
    image: postgres:14.3
    container_name: postgres
    # posgresのデフォルトポートが5432
    ports:
      - 5432:5432
    environment:
      # タイムゾーン
      - TZ=Asia/Tokyo
    # 環境変数ファイル
    env_file:
      - .env

.env

POSTGRES_PASSWORD=root
POSTGRES_USER=root
POSTGRES_DB=dev

やったこと

占有portを確認

lsof -i :5432で5432のポートの使用状況を確認できます。

MacBook work % lsof -i :5432
COMMAND     PID USER    FD   TYPE             DEVICE SIZE/OFF NODE NAME
com.docke 20301  h_h  164u   IPv6 0x28568c6740acfe63      0t0  TCP *:postgresql (LISTEN)
postgres  48594  h_h    7u   IPv6 0xc46585475d1db213      0t0  TCP localhost:postgresql (LISTEN)
postgres  48594  h_h    8u   IPv4 0x843bf5779dd45cce      0t0  TCP localhost:postgresql (LISTEN)

COMMANDがcom.dockeになっているものがcontainerのポートで、他二つが以前ローカルに入れたpostgresでした。
なので下二つをkillする必要があります。

こちらのコマンドでkillすることでコンテナのみにすることができました。

MacBook work % kill -9 [PIDの数字]

確認するとこんな感じ

MacBook work % lsof -i :5432
COMMAND     PID USER    FD   TYPE             DEVICE SIZE/OFF NODE NAME
com.docke 20301  h_h  164u   IPv6 0x28568c6740acfe63      0t0  TCP *:postgresql (LISTEN)

goのコードを確認

goのDB接続を以下のようなコードで行おうとしていました。

package main

import (
	"database/sql"
	"log"

	_ "github.com/lib/pq"
)

var Db *sql.DB
var err error
type Person struct {
	Name string
	Age  int
}

func main() {
    // ここのhostが誤り
	Db, err = sql.Open("postgres", "user=root password=root dbname=dev host=localhost port=5432 sslmode=disable")
	if err != nil{
		log.Panicln(err)
	}
	defer Db.Close()

}

docker-composeで起動しているコンテナにはネットワーク名の代わりにコンテナ名で接続することが可能らしいです。
そのためOpenの引数をhost=postgresに変えました。

Db, err = sql.Open("postgres", "host=postgres port=5432 user=root password=root dbname=dev sslmode=disable")

これで接続ができました!

参考記事様

https://zenn.dev/json_hardcoder/articles/5925798786a07a
https://qiita.com/Keyskey/items/a1baa04d6850cc50727c

Discussion