繁体   English   中英

无法从 docker-compose 上的其他服务解析 postgres 主机名

[英]Can not resolve postgres hostname from other service on docker-compose

我有一个运行 2 个容器的 docker-compose 文件。 其中一项服务是 postgres,另一项是我的后端服务。 当我尝试解析 postgres 或尝试从后端服务的 cli 连接它时,它是成功的。 但是当我尝试使用主机名初始化数据库时,出现以下错误:

2022/09/01 08:49:53 /src/domain/domain.go:29 [错误] 无法初始化数据库,出错无法连接到host=postgres user=devuser database=backenddev :主机名解析错误(查找 postgres :设备或资源忙)恐慌:无法连接到host=postgres user=devuser database=backenddev :主机名解析错误(查找postgres:设备或资源忙)

goroutine 1 [running]: github.com/anilkusc/backend/api.(*Api).Init(0xc00000e150) /src/api/api.go:34 +0x76b github.com/anilkusc/backend/api.(*Api ).Start(0xc00000e150) /src/api/api.go:87 +0x25 main.main() /src/main.go:48 +0x15f

当我尝试从另一个容器 cli 连接 postgresql 时,我得到以下信息:

root@8a0824fca084:/# nc -vz postgres 5432
Connection to postgres (172.25.0.2) 5432 port [tcp/postgresql] succeeded!
root@8a0824fca084:/# curl postgres:5432
curl: (52) Empty reply from server

这是相关的代码块:

        d.Database, err = gorm.Open(postgres.Open(os.Getenv("DB_CONN")), &gorm.Config{})
        if err != nil {
            return err
        }

这是撰写文件:

version: '3.6'
services:
  postgres:
    image: postgres:14.5
    restart: always
    environment:
      POSTGRES_PASSWORD: <>
      POSTGRES_DB: backenddev
      POSTGRES_USER: devuser 
    ports:
      - 5432:5432

  backend:
    image: my-service:v0.0.2
    restart: always
    environment:
      ENV: dev
      STORE_KEY: 1234
      DB_CONN: host=postgres user=devuser password=<> dbname=backenddev port=5432
    ports:
      - 8080:8080
    depends_on:
      - postgres

这是后端服务的 dockerfile:

FROM golang:1.18.4 as build
WORKDIR /src
COPY go.sum go.mod ./
RUN go mod download
COPY . . 
RUN go build -a -ldflags "-linkmode external -extldflags '-static' -s -w" -o /bin/app.

FROM alpine
WORKDIR /app
COPY --from=build /bin/app .
CMD ["./app"]

如果我尝试使用外部 ip 和后端服务端口连接到数据库,它也是成功的,但内部连接到 postgresql 没有运气。

为什么我的应用程序无法解析 postgres 主机,即使它的主机容器可以?

感谢@Brits。 这可能与 alpine 容器和 golang 1.18.4 容器 dns 库之间的不兼容有关。 我将容器映像从 alpine 更改为 debian,问题已解决。

FROM golang:1.18.4 as build
WORKDIR /src
COPY go.sum go.mod ./
RUN go mod download
COPY . . 
RUN go build -a -ldflags "-linkmode external -extldflags '-static' -s -w" -o /bin/app.

FROM debian:buster-slim #just changed here!
WORKDIR /app
COPY --from=build /bin/app .
CMD ["./app"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM