【问题标题】:Error connecting to Postgres database running on Docker: "dial tcp: [...] no such host"连接到在 Docker 上运行的 Postgres 数据库时出错:“dial tcp: [...] no such host”
【发布时间】:2021-04-29 20:21:24
【问题描述】:

问题

$ 运行 cmd/syndicate/main.go 2021/01/25 16:37:25 连接数据库出错:dial tcp:lookup db: no such host

尝试运行时无法连接数据库:

$ go run cmd/syndicate/main.go
2021/01/25 16:37:25 error connecting to database: dial tcp: lookup db: no such host

&

$ migrate -source file://migrations -database postgres://postgres:secret@db:5432/syndicate?sslmode=disable up
error: dial tcp: lookup db on [2001:558:feed::1]:53: no such host

这两个命令有什么共同点?... 数据库 URL。我几乎可以肯定我的数据库 URL 不正确。

我已验证我的 postgres 容器正在运行:

$ docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED      STATUS      PORTS                    NAMES
4e578bf646c7   adminer    "entrypoint.sh docke…"   3 days ago   Up 3 days   0.0.0.0:8080->8080/tcp   syndicate_adminer_1
729fc179aa6f   postgres   "docker-entrypoint.s…"   3 days ago   Up 3 days   5432/tcp                 syndicate_db_1

这就是我可能忽略某些东西的地方......

$ docker-compose ps
       Name                      Command               State           Ports         
-------------------------------------------------------------------------------------
syndicate_adminer_1   entrypoint.sh docker-php-e ...   Up      0.0.0.0:8080->8080/tcp
syndicate_db_1        docker-entrypoint.sh postgres    Up      5432/tcp    

5432/tcp???

我看到我的 adminer 容器已明确映射到我的本地端口 (0.0.0.0:8080->8080/tcp),但是我的 postgres 容器仅显示 5432/tcp(而不是 0.0.0.0:5432->5432/tcp

  • 我是 docker 新手。谁能解释为什么我的 postgres 端口与我的本地端口没有关联?
  • 我走对了吗?

这是我的 docker-compose.yml:

version: "3.8"

services:
  db:
    image: postgres
    environment:
      POSTGRES_DB: $POSTGRES_DB
      POSTGRES_USER: $POSTGRES_USER
      POSTGRES_PASSWORD: $POSTGRES_PASSWORD

  migrate:
    image: migrate/migrate
    volumes:
      - ./migrations:/migrations
    depends_on:
      - db
    command: -source=file://migrations -database postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@db:5432/$POSTGRES_DB?sslmode=disable up

  adminer:
    image: adminer
    restart: always
    ports:
      - "8080:8080"
    environment:
      ADMINER_DEFAULT_SERVER: db
    depends_on:
      - db
  • PS。我尝试为db servicd 添加port: "5432:5432" 变量

Browse my repository at this time in history

谢谢! 康纳

【问题讨论】:

    标签: database postgresql docker tcp localhost


    【解决方案1】:

    migrate -path D:/works/go/go-fiber-api-server/backend/platform/migrations -database "postgres://postgres:password@cgapp-postgres:5432/postgres?sslmode=disable" up 错误:拨号 tcp:查找 cgapp-postgres:没有这样的主机

    然后我修复了这个问题,将 db-host name(cgapp-postgres) 更改为“IP ADDRESS”或 host.docker.internal。

    migrate -path D:/works/go/go-fiber-api-server/backend/platform/migrations -database "postgres://postgres:password@100.100.100.100:5432/postgres?sslmode=disable" up 1/u create_init_tables (20.0987ms)

    迁移 -path D:/works/go/go-fiber-api-server/backend/platform/migrations -database "postgres://postgres:password@host.docker.internal:5432/postgres?sslmode=disable “ 向上 1/u create_init_tables (20.0987ms)

    “host.docker.internal”有效。

    【讨论】:

      【解决方案2】:

      添加到数据库服务

      ports: 
         - "5432:5432"
      

      【讨论】:

        猜你喜欢
        • 2016-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-11
        • 2019-08-07
        • 2019-11-30
        • 2022-11-24
        • 1970-01-01
        相关资源
        最近更新 更多