2017-11-05 5 views
0

연결 상태 :GORM + 도커 오류 나는 도커 내 PostgreSQL 데이터베이스에 연결을 시도

package main 

import (
    "fmt" 
    "log" 

    "github.com/jinzhu/gorm" 
    _ "github.com/jinzhu/gorm/dialects/postgres" 
) 

type Product struct { 
    gorm.Model 
    Code string 
    Price uint 
} 

var db *gorm.DB 

func init() { 
    connection := fmt.Sprintf("host=db sslmode=disable user=dnz-dev password=dnz-dev") 
    db, err := gorm.Open("postgres", connection) 
    if err != nil { 
     log.Fatalln(err) 
    } 
    defer db.Close() 
} 

func main() { 
    // Migrate the schema 
    db.AutoMigrate(&Product{}) 
} 

docker-compose

버전 : "3.3"

services: 
    db: 
    build: ./dnz-db 
    container_name: dnz-database 
    ports: 
     - "6000:5432" 
    volumes: 
     - ./dnz-db/data:/var/lib/postgresql/data 
    environment: 
     - POSTGRES_USER=dnz-dev 
     - POSTGRES_PASSWORD=dnz-dev 

    api: 
    build: ./dnz-api 
    container_name: dnz-api 
    volumes: 
     - ./dnz-api:/go/src/app 
    ports: 
     - "5000:3000" 
    depends_on: 
     - db 

나는 docker-compose up --build을 실행하고 나는 얻을 이 오류 :

Attaching to dnz-database, dnz-api dnz-api | 2017/11/05 10:23:46 dial tcp 172.21.0.2:5432: getsockopt: connection refused dnz-api | exit status 1 dnz-api exited with code 1

내가 뭘 잘못 했니?

답변

1

psql 컨테이너에 연결하지 못 했으므로 연결할 수 없습니다. Docker-Compose documentation on links을보십시오.

또한 컨테이너 시작 순서를 예약하지 않았다고 가정합니다. Psql 컨테이너는 golang의 컨테이너보다 먼저 시작해야합니다. Docker Compose documentation on startup order을 살펴보십시오. wait-for-it을 사용하여 문서에 명시된 목표를 달성 할 수 있습니다. 그냥 wget입니다. 프로젝트에 저장하십시오.

나는 당신의 Dockerfile의 내용을 모르지만 나는 뭔가처럼 가정합니다 : 그래서

FROM golang:1.9 

RUN mkdir -p /go/src/github.com/pavel/gorm-psql 
WORKDIR /go/src/github.com/pavel/gorm-psql 

ADD . /go/src/github.com/pavel/gorm-psql 

RUN go get -v 

, 당신이 docker-compose.yml이 뭔가 앱을 처음 실행 wait-for-it.sh 및 링크 psql 컨테이너에 편집해야합니다 같은 :

main 다른 이름을 가지고
version: '3.3' 
services: 
    db: 
    image: postgres 
    environment: 
     POSTGRES_DB: dnz-dev 
     POSTGRES_USER: dnz-dev 
     POSTGRES_PASSWORD: dnz-dev 
    ports: 
     - 6000:5432 
    api: 
    build: . 
    command: ["./wait-for-it.sh", "db:6000", "--", "go", "run", "main.go"] 
    volumes: 
     - .:/go/src/github.com/pavel/gorm-psql 
    ports: 
     - "5000:3080" 
    depends_on: 
     - db 
    links: 
     - db 

경우 단지 변경합니다. volumes을 편집하여 필요한 경로를 지정하십시오. /go/src/github.com/pavel/gorm-psql으로 표준을 설정했습니다. 나는 이름이 다르다면 dnz-dev이라는 이름의 db를 만들었다 고 가정하고 있습니다.

$ go env: 

. . . 
GOPATH="/home/pavel/go" 
GOROOT="/usr/lib/go" 
. . . 

그냥 docker-compose up으로 실행하면 정상적으로 작동합니다. 나는 postgresqlgolang 최신 이미지에 의존하고 있습니다.

관련 문제