微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

连接到在 Docker 上运行的 Postgres 数据库时出错:“dial tcp: [...] no such host” 5432/tcp???

如何解决连接到在 Docker 上运行的 Postgres 数据库时出错:“dial tcp: [...] no such host” 5432/tcp???

问题

$ 去运行 cmd/syndicate/main.go 2021/01/25 16:37:25 错误连接到数据库:拨号 tcp:查找数据库:没有这样的主机

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

$ 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???

我看到我的管理员容器清楚地映射到我的本地端口 (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
  • 附注。我尝试为 port: "5432:5432" servicd
  • 添加 db 变量

Browse my repository at this time in history

谢谢! 康纳

解决方法

添加到数据库服务

ports: 
   - "5432:5432"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。