Maison > développement back-end > Golang > le corps du texte

Échec de l'initialisation de la base de données avec l'erreur Impossible de se connecter à `host=db user=database=` : erreur de connexion (connexion TCP xxxx : connexion : connexion refusée)

王林
Libérer: 2024-02-06 09:25:14
avant
1236 Les gens l'ont consulté

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

Contenu de la question

Chaque fois que je démarre le service de conteneur Docker, j'obtiens l'erreur 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
Copier après la connexion

J'utilise air进行实时重新加载,请找到air.tomlfichiers

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())
        }
    }
Copier après la connexion

Si vous enregistrez à nouveau le code et rechargez l'application en direct, la connexion sera établie


Bonne réponse


Besoin d'attendre la fin de l'initialisation de la postgresbase de données.

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

pourdb服务添加healthcheck

healthcheck:
    test: ["cmd-shell", "pg_isready"]
    interval: 10s
    timeout: 5s
    retries: 5
Copier après la connexion

et changez depend_on comme suit

depends_on:
  db:
    condition: service_healthy
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!