为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕容708150 2023-02-06 18:39:41
我有一个运行 2 个容器的 docker-compose 文件。其中一项服务是 postgres,另一项是我的后端服务。当我尝试解析 postgres 或尝试从后端服务的 cli 连接它时,它是成功的。但是当我尝试使用 hostname 初始化数据库时,出现以下错误: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 [正在运行]: 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 5432Connection to postgres (172.25.0.2) 5432 port [tcp/postgresql] succeeded!root@8a0824fca084:/# curl postgres:5432curl: (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 buildWORKDIR /srcCOPY go.sum go.mod ./RUN go mod downloadCOPY . . RUN go build -a -ldflags "-linkmode external -extldflags '-static' -s -w" -o /bin/app.FROM alpineWORKDIR /appCOPY --from=build /bin/app .CMD ["./app"]如果我尝试使用后端服务上的外部 ip 和端口连接到数据库,它也会成功,但内部连接到 postgresql 时运气不好。为什么我的应用程序无法解析 postgres 主机,即使它的主机容器可以?
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

这可能与 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"]


查看完整回答
反对 回复 2023-02-06
  • 1 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号