Задать вопрос
  • Не запускается Docker контейнер?

    @BlackWood73 Автор вопроса
    Леонид Николаев, спасибо большое контейнер запустился
  • Не запускается Docker контейнер?

    @BlackWood73 Автор вопроса
    а тогда какой из них убрать лучше будет ?
  • Не запускается Docker контейнер?

    @BlackWood73 Автор вопроса
    Леонид Николаев, не понял вас , эти две строчки расположены в разных файлах и как типо они конфликтуют друг с другом или что ?
  • Не запускается Docker контейнер?

    @BlackWood73 Автор вопроса
    Леонид Николаев, а как вариант можно ли через .env попробовать
  • Не запускается Docker контейнер?

    @BlackWood73 Автор вопроса
    Леонид Николаев, заменено у меня уже было
  • Не запускается Docker контейнер?

    @BlackWood73 Автор вопроса
    скинул все файлы в которых может быть ошибка
  • Не запускается Docker контейнер?

    @BlackWood73 Автор вопроса
    main.go

    package main

    import (
    "context"
    "fmt"
    "log"
    "net/http"
    "os"
    "os/signal"
    "syscall"
    "time"

    "github.com/RUST-GOLANG/2025-q1-practice.git/config"
    "github.com/RUST-GOLANG/2025-q1-practice.git/internal/routes"
    "github.com/gorilla/mux"
    "github.com/jackc/pgx/v5" // Импортируем pgx для работы с PostgreSQL
    )

    func main() {
    cfg := config.LoadConfig()

    // Замените 'your_password' и 'your_database' на ваши реальные данные
    databaseURL := "user=postgres password=Ishtaev73 dbname=postgres sslmode=disable"

    // Подключение к базе данных
    conn, err := pgx.Connect(context.Background(), databaseURL)
    if err != nil {
    log.Fatal("Unable to connect to database:", err)
    }
    defer conn.Close(context.Background()) // Передаем контекст в Close()

    fmt.Println("Successfully connected to the database!")

    // Регистрация маршрутов
    r := mux.NewRouter()
    routes.RegisterRoutes(r, conn)

    srv := &http.Server{
    Handler: r,
    Addr: cfg.ServerAddress,
    }

    go func() {
    log.Println("Starting server on", cfg.ServerAddress)
    if err := srv.ListenAndServe(); err != nil {
    log.Fatal(err)
    }
    }()

    // Graceful shutdown
    c := make(chan os.Signal, 1)
    signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
    <-c

    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
    defer cancel()
    if err := srv.Shutdown(ctx); err != nil {
    log.Fatal("Server forced to shutdown:", err)
    }
    }

    db.go

    package db

    import (
    "context"
    "log"
    "strings"

    "github.com/jackc/pgx/v5"
    )

    // Connect устанавливает соединение с базой данных PostgreSQL
    func Connect(databaseURL string) *pgx.Conn {
    // Проверка и добавление sslmode=disable, если это необходимо
    if !containsSSLMode(databaseURL) {
    databaseURL += " sslmode=disable"
    }

    conn, err := pgx.Connect(context.Background(), databaseURL)
    if err != nil {
    log.Fatal("Unable to connect to database:", err)
    }
    return conn
    }

    // containsSSLMode проверяет, содержит ли строка подключения параметр sslmode
    func containsSSLMode(databaseURL string) bool {
    return strings.Contains(databaseURL, "sslmode=")
    }

    config.go

    package config

    import (
    "os"
    )

    type Config struct {
    ServerAddress string
    DatabaseURL string
    }

    func LoadConfig() *Config {
    return &Config{
    ServerAddress: os.Getenv("SERVER_ADDRESS"),
    DatabaseURL: os.Getenv("DATABASE_URL"),
    }
    }
    Dockerfile

    # Этап сборки
    FROM golang:1.23 AS builder

    # Устанавливаем рабочую директорию
    WORKDIR /app

    # Копируем go.mod и go.sum
    COPY go.mod go.sum ./

    # Загружаем зависимости
    RUN go mod download

    # Копируем остальные файлы
    COPY . .

    # Собираем приложение
    RUN CGO_ENABLED=0 GOOS=linux go build -o main ./cmd/main.go

    # Этап запуска
    FROM alpine:latest

    # Устанавливаем рабочую директорию
    WORKDIR /app

    # Копируем скомпилированное приложение из предыдущего этапа
    COPY --from=builder /app/main .

    # Указываем команду для запуска
    CMD ["./main"]

    # Открываем порт, если приложение его использует
    EXPOSE 8080
  • Не запускается Docker контейнер?

    @BlackWood73 Автор вопроса
    Леонид Николаев, убрал

    2025-03-03 11:32:36 2025/03/03 08:32:36 Unable to connect to database:failed to connect to `user=postgres database=postgres`: /tmp/.s.PGSQL.5432 (/tmp): dial error: dial unix /tmp/.s.PGSQL.5432: connect: no such file or directory
    такую же ошибку и выдает
  • Не запускается Docker контейнер?

    @BlackWood73 Автор вопроса
    services:
    app:
    build: .
    ports:
    - "8080:8080"
    environment:
    SERVER_ADDRESS: 0.0.0.0:8080
    DATABASE_URL: postgresql://postgres:Ishtaev73@db:5432/postgres
    depends_on:
    - db
    restart: unless-stopped

    db:
    image: postgres:latest
    environment:
    POSTGRES_USER: postgres
    POSTGRES_PASSWORD: Ishtaev73
    POSTGRES_DB: postgres
    ports:
    - "5432:5432"
    volumes:
    - postgres_data:/var/lib/postgresql/data
    restart: unless-stopped
    healthcheck:
    test: ["CMD-SHELL", "pg_isready -U postgres"]
    interval: 10s
    timeout: 5s
    retries: 5

    volumes:
    postgres_data:

    мой файл docker-compose.yml
  • Не запускается Docker контейнер?

    @BlackWood73 Автор вопроса
    а как мне подключиться через хост