Gorm + Docker ошибка при подключении
Я пытаюсь подключиться к моей базе данных postgresql с помощью Docker:
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
и я получаю эту ошибку:
Присоединение к базе данных dnz, dnz-api dnz-api | 2017/11/05 10:23:46 dial tcp 172.21.0.2:5432: getsockopt: соединение отклонено dnz-api | статус выхода 1 dnz-api вышел с кодом 1
Что я делаю не так?
1 ответ
Вы не можете подключиться к вашему psql
контейнер, потому что вы не связали его. Посмотрите документацию Docker-Compose по ссылкам.
Кроме того, я предполагаю, что вы не планируете свой заказ на запуск контейнера. Psql
контейнер должен начаться до golang
один. Ознакомьтесь с документацией Docker Compose по порядку запуска. Вы можете использовать функцию 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
Контейнер для вашего приложения с чем-то вроде:
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
Если имя другое, просто отредактируйте его.
$ go env:
. . .
GOPATH="/home/pavel/go"
GOROOT="/usr/lib/go"
. . .
Просто беги docker-compose up
и это должно работать просто отлично. Я полагаюсь на последние изображения postgresql и golang.