Rumah > pembangunan bahagian belakang > Golang > Gagal memulakan pangkalan data dengan ralat Tidak dapat menyambung ke `host=db user=database=`: Ralat dail (tcp dail xxxx: sambung: sambungan ditolak)

Gagal memulakan pangkalan data dengan ralat Tidak dapat menyambung ke `host=db user=database=`: Ralat dail (tcp dail xxxx: sambung: sambungan ditolak)

王林
Lepaskan: 2024-02-06 09:25:14
ke hadapan
1331 orang telah melayarinya

初始化数据库失败,出现错误无法连接到`host=db user=database=`:拨号错误(拨号tcp xxxx:连接:连接被拒绝)

Kandungan soalan

Setiap kali saya memulakan perkhidmatan kontena pelabuhan, saya mendapat ralat failed to initialize.

version: '3'

services:
  app:
    container_name: api
    build:
      context: .
      dockerfile: local.dockerfile
    ports:
      - "9090:9090"
      - "40000:40000"
    security_opt:
      - "seccomp:unconfined"
    cap_add:
      - sys_ptrace
    restart: on-failure
    environment:
      port: 9090
      db_conn: "postgres://admin:pass@db:5432/test?sslmode=disable"
    volumes:
      - .:/app
    depends_on:
      - db
    links:
      - db

  db:
    image: postgres
    container_name: db
    ports:
      - "5432:5432"
    environment:         
      postgres_user: "admin"
      postgres_password: "pass"
      postgres_db: "test"
      tz: "utc"
      pgtz: "utc"
    volumes:
      - ./tmp:/var/lib/postgresql/data
Salin selepas log masuk

Saya menggunakan air进行实时重新加载,请找到air.tomlfail

root="."
tmp_dir="tmp"

[build]
cmd="go build -gcflags=\"all=-N -l\" -o ./bin/main ."
bin="/app/bin"
full_bin="/app/bin/main"
log="air_errors.log"
include_ext=["go", "yaml"]
exclude_dir=["tmp"]
delay=1000

[log]
time=true


[misc]
clean_on_exit=true




func main() {
    Instance, err = gorm.Open(postgres.Open(conn), &gorm.Config{
            Logger: logger.New(
                log.New(os.Stdout, "", log.LstdFlags), logger.Config{
                    LogLevel: logger.Info,
                    Colorful: true,
                }),
        })
        if err != nil {
            panic("Cannot connect to DB" + err.Error())
        }
    }
Salin selepas log masuk

Jika anda menyimpan kod sekali lagi dan memuatkan semula aplikasi secara langsung, sambungan akan diwujudkan


Jawapan betul


Perlu menunggu sehingga postgrespemulaan pangkalan data selesai.

Lihat https://docs. docker.com/compose/compose-file/compose-file-v3/#healthcheck

untukdb服务添加healthcheck

healthcheck:
    test: ["cmd-shell", "pg_isready"]
    interval: 10s
    timeout: 5s
    retries: 5
Salin selepas log masuk

dan tukar depend_on seperti berikut

depends_on:
  db:
    condition: service_healthy
Salin selepas log masuk

Atas ialah kandungan terperinci Gagal memulakan pangkalan data dengan ralat Tidak dapat menyambung ke `host=db user=database=`: Ralat dail (tcp dail xxxx: sambung: sambungan ditolak). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan