I am getting the failed to initialize
error whenever I start up my docker container service.
version: '3'
services:
app:
container_name: api
build:
context: .
dockerfile: local.Dockerfile
ports:
- "9090:9090"
- "40000:40000"
security_opt:
- "seccomp:unconfined"
cap_add:
- SYS_PTRACE
restart: on-failure
environment:
PORT: 9090
DB_CONN: "postgres://admin:pass@db:5432/test?sslmode=disable"
volumes:
- .:/app
depends_on:
- db
links:
- db
db:
image: postgres
container_name: db
ports:
- "5432:5432"
environment:
POSTGRES_USER: "admin"
POSTGRES_PASSWORD: "pass"
POSTGRES_DB: "test"
TZ: "UTC"
PGTZ: "UTC"
volumes:
- ./tmp:/var/lib/postgresql/data
I am using air
for live reload, please find the air.toml
file
root="."
tmp_dir="tmp"
[build]
cmd="go build -gcflags=\"all=-N -l\" -o ./bin/main ."
bin="/app/bin"
full_bin="/app/bin/main"
log="air_errors.log"
include_ext=["go", "yaml"]
exclude_dir=["tmp"]
delay=1000
[log]
time=true
[misc]
clean_on_exit=true
func main() {
Instance, err = gorm.Open(postgres.Open(conn), &gorm.Config{
Logger: logger.New(
log.New(os.Stdout, "", log.LstdFlags), logger.Config{
LogLevel: logger.Info,
Colorful: true,
}),
})
if err != nil {
panic("Cannot connect to DB" err.Error())
}
}
The connection gets established if you save the code again and air live reload the appliation
CodePudding user response:
You need to wait until the postgres
database has been initialized.
Have a look at https://docs.docker.com/compose/compose-file/compose-file-v3/#healthcheck
Add a healthcheck
for db
service
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
And change depend_on
as below
depends_on:
db:
condition: service_healthy