2017-11-05 23 views
0

ながら:私はdocker-compose up --buildを実行して、私が得る "3.3"ゴーム+ドッカーエラー私はドッカーと私のPostgreSQLデータベースへの接続を試みる接続

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 

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

バージョンをこのエラー:

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コンテナに編集すべきlike:

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 

mainに別の名前がある場合は、それを変更してください。 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最新の画像に頼っています。

関連する問題