我在运行 docker 映像时遇到问题。我有一个与 PostgreSQL 连接的简单应用程序,我编写了 Dockerfile 和 docker-compose 文件来创建该应用程序的映像。
有两张图片:
运行
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
根据您的服务名称使用 Docker 内部 DNS
db
:
const (
host = "db"
port = 5432
user = "postgres"
password = "password"
dbname = "test"
)