在docker compose中读取udp:io/timeout

问题描述 投票:0回答:1

我在运行 docker 映像时遇到问题。我有一个与 PostgreSQL 连接的简单应用程序,我编写了 Dockerfile 和 docker-compose 文件来创建该应用程序的映像。

有两张图片:

  1. test2-应用程序
  2. postgres

运行

docker run -it test2-app
后,它给了我这个错误:

2024/03/05 05:26:10 dial tcp: lookup postgres on 192.168.65.7:53: read udp 172.17.0.2:39295->192.168.75.8:43: i/o timeout

我重新启动了 Docker Desktop,但没有成功。

注意: 我在 Windows 上使用 WSL 2。

main.go 文件

const (
    host     = "postgres"
    port     = 5432
    user     = "postgres"
    password = "password"
    dbname   = "test"
)

func main() {
    connStr := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", host, port, user, password, dbname)

    db, err := sql.Open("postgres", connStr)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    err = db.Ping()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Successfully connected to PostgreSQL")
}

Dockerfile

FROM golang:latest

WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download

COPY . .

RUN go build -o main .

CMD ["./main"]

docker-compose.yml 文件

version: '2.2'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=test
    depends_on:
      - db
  db:
    image: postgres
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: test
postgresql docker go docker-compose containers
1个回答
0
投票

根据您的服务名称使用 Docker 内部 DNS

db
:

const (
    host     = "db"
    port     = 5432
    user     = "postgres"
    password = "password"
    dbname   = "test"
)
© www.soinside.com 2019 - 2024. All rights reserved.