我有一个 docker 组成的文件,其中运行2个容器. 其中一个服务是postgres,另一个是我的后端服务. 当我try 解析postgres或try 从后端服务的cli连接它时,它成功了. 但是,当我try 使用主机名初始化数据库时,我得到了以下错误:
2022/09/01 08:49:53/src/域/域.转: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
当我try 从另一个容器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"]
如果我try 使用后端服务上的外部IP和端口连接到数据库,也是成功的,但对于内部连接到PostgreSQL则没有运气.
为什么我的应用程序不能解析postgres主机,即使它的主机容器可以?