Ошибка при запуске Docker-контейнера или Docker Compose с помощью postgres, golang и Debian 11, серверной части Agora appbuilder.

Я запустил Debian 11 EC2 на AWS, установил на него postgres 14.5, а также docker и docker Compose. Я добавил в postgres суперпользователя «admin» с паролем. Я создал файл docker-compose.yml и файл . env-файл.

Когда я пытаюсь использовать файл docker-compose.yml, я получаю:

      sudo docker compose up -d
services.database.environment must be a mapping

Когда я создаю свой докер-контейнер с помощью

      sudo docker build . -t tvappbuilder:latest

а затем попробуйте запустить его с помощью:

      sudo docker run -p 8080:8080 tvappbuilder:latest --env-file .env -it
Config Path .
4:47PM INF server/utils/logging.go:105 > logging configured fileLogging=true fileName=app-builder-logs logDirectory=./logs maxAgeInDays=0 maxBackups=0 maxSizeMB=0
4:47PM FTL server/cmd/video_conferencing/server.go:71 > Error initializing database error="pq: Could not detect default username. Please provide one explicitly"

Вот докеры на данный момент:

      sudo docker image list
REPOSITORY     TAG       IMAGE ID       CREATED         SIZE
<none>         <none>    6e5f035abda5   18 hours ago    1.82GB
tvappbuilder   latest    6166e24a47e0   21 hours ago    21.8MB
<none>         <none>    cedcaf2facd1   21 hours ago    1.82GB
hello-world    latest    feb5d9fea6a5   12 months ago   13.3kB
golang         1.15.1    9f495162f677   2 years ago     839MB

Вот docker-compose.yml:

      version: 3.7
services:
    server:
        container_name: server
        build: .
        depends_on:
            - database
        ports:
           - 8080:8080
        environment:
            - APP_ID: $APP_ID
            - APP_CERTIFICATE: $APP_CERTIFICATE
            - CUSTOMER_ID: $CUSTOMER_ID
            - CUSTOMER_CERTIFICATE: $CUSTOMER_CERTIFICATE
            - BUCKET_NAME: $BUCKET_NAME
            - BUCKET_ACCESS_KEY: $BUCKET_ACCESS_KEY
            - BUCKET_ACCESS_SECRET: $BUCKET_ACCESS_SECRET
            - CLIENT_ID: $CLIENT_ID
            - CLIENT_SECRET: $CLIENT_SECRET
            - PSTN_USERNAME: $PSTN_USERNAME
            - PSTN_PASSWORD: $PSTN_PASSWORD
            - SCHEME: $SCHEME
            - ALLOWED_ORIGIN: ""
            - ENABLE_NEWRELIC_MONITORING: false
            - RUN_MIGRATION: true
            - DATABASE_URL: postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@database:5432/$POSTGRES_DB?sslmode=disable

    database:
        container_name: server_database
        image: postgres-14.5
        restart: always
        hostname: database
        environment: 
            - POSTGRES_USER: $POSTGRES_USER
            - POSTGRES_PASSWORD: $POSTGRES_PASSWORD
            - POSTGRES_DB: $POSTGRES_DB

и вот файл .env:

      ENCRYPTION_ENABLED=0
POSTGRES_USER=admin
POSTGRES_PASSWORD=<correct pswd for admin>
POSTGRES_DB=tvappbuilder
APP_ID=<my real app ID>
APP_CERTIFICATE=<my real app cert>
CUSTOMER_ID=<my real ID>
CUSTOMER_CERTIFICATE=<my real cert>
RECORDING_REGION=0
BUCKET_NAME=<my bucket name>
BUCKET_ACCESS_KEY=<my real key>
BUCKET_ACCESS_SECRET=<my real secret>
CLIENT_ID=
CLIENT_SECRET=
PSTN_USERNAME=
PSTN_PASSWORD=
PSTN_ACCOUNT=
PSTN_EMAIL=
SCHEME=esports1_agora
ENABLE_SLACK_OAUTH=0
SLACK_CLIENT_ID=
SLACK_CLIENT_SECRET=
GOOGLE_CLIENT_ID=
ENABLE_GOOGLE_OAUTH=0
GOOGLE_CLIENT_SECRET=
ENABLE_MICROSOFT_OAUTH=0
MICROSOFT_CLIENT_ID=
MICROSOFT_CLIENT_SECRET=
APPLE_CLIENT_ID=
APPLE_PRIVATE_KEY=
APPLE_KEY_ID=
APPLE_TEAM_ID=
ENABLE_APPLE_OAUTH=0
PAPERTRAIL_API_TOKEN=<my real token>

В соответствии с этим: https://pkg.go.dev/github.com/lib/pq Мне, вероятно, не нужно использовать pq, а вместо этого использовать напрямую postgres, но, похоже, он был настроен таким образом.

Большое спасибо за любые указатели!

1 ответ

Ошибка:

      services.database.environment must be a mapping

Это говорит о том, что ценность...

      version: 3.7
services:
    server:
        ...
        environment:   # <-- THIS KEY HERE

Должно быть сопоставление (то есть словарь), но вы предоставили список. Вы хотите:

      version: 3.7
services:
    server:
        container_name: server
        build: .
        depends_on:
            - database
        ports:
           - 8080:8080
        environment:
          APP_ID: $APP_ID
          APP_CERTIFICATE: $APP_CERTIFICATE
          CUSTOMER_ID: $CUSTOMER_ID
          CUSTOMER_CERTIFICATE: $CUSTOMER_CERTIFICATE
          BUCKET_NAME: $BUCKET_NAME
          BUCKET_ACCESS_KEY: $BUCKET_ACCESS_KEY
          BUCKET_ACCESS_SECRET: $BUCKET_ACCESS_SECRET
          CLIENT_ID: $CLIENT_ID
          CLIENT_SECRET: $CLIENT_SECRET
          PSTN_USERNAME: $PSTN_USERNAME
          PSTN_PASSWORD: $PSTN_PASSWORD
          SCHEME: $SCHEME
          ALLOWED_ORIGIN: ""
          ENABLE_NEWRELIC_MONITORING: false
          RUN_MIGRATION: true
          DATABASE_URL: postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@database:5432/$POSTGRES_DB?sslmode=disable
Другие вопросы по тегам