ecom 服务没有运行,不知道幕后发生了什么。 为什么此服务在其他服务正在运行时没有侦听数据库服务。同时我已经设置了 DB_HOST=db 但仍然无法连接,该服务发生了什么。为什么?
错误:拨号 tcp 127.0.0.1:5432:连接:连接被拒绝
我在这里使用sqlx
package database
import (
"fmt"
"log"
"os"
"ecommerce/database/models"
"github.com/jmoiron/sqlx"
_ "github.com/lib/pq"
)
func MakeDbConnection() *sqlx.DB {
url := fmt.Sprintf("user=%s password=%s dbname=%s sslmode=disable", os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD"), os.Getenv("DB_NAME"))
db, err := sqlx.Connect("postgres", url)
if err != nil {
log.Fatal(err)
}
// transaction
tx := db.MustBegin()
tx.MustExec(models.Schema)
tx.Commit()
db.SetConnMaxIdleTime(5)
db.SetMaxOpenConns(5) //
fmt.Println("connection to database was successfull")
return db
}
我的本地 .env 文件
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=*****
DB_NAME=ecom
DB_HOSt=db
我的 Dockerfile
FROM golang:1.22-alpine
WORKDIR /app
COPY go.mod ./
COPY go.sum ./
RUN go mod download
RUN apk --no-cache add postgresql-client
COPY . .
RUN go build -o main .
EXPOSE 4000
ENV DB_HOST=db
ENV DB_PORT=5432
ENV DB_USER=user
ENV DB_PASSWORD=password
ENV DB_NAME=ecom
CMD ["./main"]
我的 docker 撰写文件
version: "3"
services:
db:
image: postgres:latest
restart: always
ports:
- 5432:5432
container_name: db
network_mode: bridge
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=ecom
volumes:
- db-data:/var/lib/postgresql/data
pgadmin:
image: chorss/docker-pgadmin4
container_name: pgAdmin
depends_on:
- db
network_mode: bridge
ports:
- 5050:5050
ecom_api:
build: .
container_name: ecom_api
network_mode: bridge
restart: always
environment:
- DB_HOST=db
- DB_PORT=5432
- DB_USER=user
- DB_PASSWORD=password
- DB_NAME=ecom
volumes:
- .env:/user/src/app/.env
depends_on:
- db
ports:
- "4000:4000"
command: go run main.go
volumes:
db-data:
github.com/lib/pq 在连接字符串中接受 PGHOST 或 host。
您也没有设置,所以它使用默认的
localhost
。您应该将 host=db
添加到您的连接字符串(不是 URL)。