Skip to content

[Bug]: POST /api/v1/applications/dockercompose docker_compose_raw should be base 64 encoded #4843

@balmacefa

Description

@balmacefa

Error Message and Logs

I'm trying to POST a new docker compose app using the api endpoint, to myself hosting tenant on v4.0.0-beta.380

/api/v1/applications/dockercompose

But it fails with error:

422 - "{\"message\":\"Validation failed.\",\"errors\":{\"docker_compose_raw\":\"The docker_compose_raw should be base64 encoded.\"}}"

This is my request:

{ "body": { "project_uuid": "wgwososgk0o4ck<...>", "server_uuid": "eg44gwg48wocww<...>", "environment_name": "production", "instant_deploy": "false", "destination_uuid": "localhost-rsg04s8wkgoc<...>", "docker_compose_raw": "dmVyc2lvbjogJzMuOCcKc2VydmljZXM6CiAgZGI6CiAgICBpbWFnZTogJ3BndmVjdG9yL3BndmVjdG9yOnBnMTYnCiAgICBjb250YWluZXJfbmFtZTogcG9zdGdyZXNfZGIKICAgIHBvcnRzOgogICAgICAtICc1NDMyOjU0MzInCiAgICByZXN0YXJ0OiBhbHdheXMKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBwZ19pc3JlYWR5CiAgICAgICAgLSAnLVUnCiAgICAgICAgLSBwb3N0Z3JlcwogICAgZW52aXJvbm1lbnQ6CiAgICAgICMgTm9tYnJlIGRlIGxhIGJhc2UgZGUgZGF0b3MgcXVlIGRlc2VlcyAoYXF1w60gbG8gZGVqYW1vcyBmaWpvIGNvbW8gImFwaSIpLgogICAgICBQT1NUR1JFU19EQjogYXBpCiAgICAgIAogICAgICAjIFVzdWFyaW8geSBjb250cmFzZcOxYSBnZW5lcmFkb3MgYXV0b23DoXRpY2FtZW50ZSBwb3IgQ29vbGlmeQogICAgICBQT1NUR1JFU19VU0VSOiAkU0VSVklDRV9VU0VSX0RCCiAgICAgIFBPU1RHUkVTX1BBU1NXT1JEOiAkU0VSVklDRV9QQVNTV09SRF9EQgoKICAgIHZvbHVtZXM6CiAgICAgIC0gJy4vaW5pdC5zcWw6L2RvY2tlci1lbnRyeXBvaW50LWluaXRkYi5kL2luaXQuc3FsJwogICAgICAtICdkYl9kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKCiAgcGdib3VuY2VyOgogICAgY29udGFpbmVyX25hbWU6IHBnYm91bmNlcgogICAgaW1hZ2U6ICdiaXRuYW1pL3BnYm91bmNlcjpsYXRlc3QnCiAgICBlbnZpcm9ubWVudDoKICAgICAgIyBSZXV0aWxpemFtb3MgbGFzIG1pc21hcyB2YXJpYWJsZXMgcGFyYSBwZ2JvdW5jZXIKICAgICAgLSBQT1NUR1JFU1FMX1VTRVJOQU1FPSRTRVJWSUNFX1VTRVJfREIKICAgICAgLSBQT1NUR1JFU1FMX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX0RCCiAgICAgIC0gUE9TVEdSRVNRTF9IT1NUPWRiCiAgICAgIC0gUEdCT1VOQ0VSX0RBVEFCQVNFPWFwaQogICAgICAtIFBPU1RHUkVTUUxfUE9SVD01NDMyCgogICAgICAtIFBPT0xfTU9ERT10cmFuc2FjdGlvbgogICAgICAtIEFETUlOX1VTRVJTPSRTRVJWSUNFX1VTRVJfREIsZGJ1c2VyCiAgICAgIC0gUEdCT1VOQ0VSX1BPT0xfTU9ERT10cmFuc2FjdGlvbgogICAgICAtIFBHQk9VTkNFUl9NQVhfQ0xJRU5UX0NPTk49MTAwMAogICAgICAtIFBHQk9VTkNFUl9NQVhfREJfQ09OTkVDVElPTlM9MjAwCiAgICAgIC0gUEdCT1VOQ0VSX0RFRkFVTFRfUE9PTF9TSVpFPTIwCiAgICAgIC0gUEdCT1VOQ0VSX1JFU0VSVkVfUE9PTF9TSVpFPTIwCiAgICAgIC0gUEdCT1VOQ0VSX1JFU0VSVkVfUE9PTF9USU1FT1VUPTUKICAgICAgLSBQR0JPVU5DRVJfUVVFUllfV0FJVF9USU1FT1VUPTYwCiAgICAgIC0gUEdCT1VOQ0VSX0lETEVfVFJBTlNBQ1RJT05fVElNRU9VVD0zMAoKICAgIHBvcnRzOgogICAgICAtICc2NDMyOjY0MzInCiAgICBkZXBlbmRzX29uOgogICAgICAtIGRiCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gcGdfaXNyZWFkeQogICAgICAgIC0gJy1oJwogICAgICAgIC0gbG9jYWxob3N0Cgp2b2x1bWVzOgogIGRiX2RhdGE6CiAgICBkcml2ZXI6IGxvY2FsCg==" }, "headers": { "Authorization": "**hidden**", "accept": "application/json,text/html,application/xhtml+xml,application/xml,text/*;q=0.9, image/*;q=0.8, */*;q=0.7" }, "method": "POST", "uri": "https://<my-tenant>.com/api/v1/applications/dockercompose", "gzip": true, "rejectUnauthorized": true, "followRedirect": true, "resolveWithFullResponse": true, "followAllRedirects": true, "timeout": 300000, "encoding": null, "json": false, "useStream": true }

This is the decoded docker compose

version: '3.8'
services:
  db:
    image: 'pgvector/pgvector:pg16'
    container_name: postgres_db
    ports:
      - '5432:5432'
    restart: always
    healthcheck:
      test:
        - CMD
        - pg_isready
        - '-U'
        - postgres
    environment:
      # Nombre de la base de datos que desees (aquí lo dejamos fijo como "api").
      POSTGRES_DB: api
      
      # Usuario y contraseña generados automáticamente por Coolify
      POSTGRES_USER: $SERVICE_USER_DB
      POSTGRES_PASSWORD: $SERVICE_PASSWORD_DB

    volumes:
      - './init.sql:/docker-entrypoint-initdb.d/init.sql'
      - 'db_data:/var/lib/postgresql/data'

  pgbouncer:
    container_name: pgbouncer
    image: 'bitnami/pgbouncer:latest'
    environment:
      # Reutilizamos las mismas variables para pgbouncer
      - POSTGRESQL_USERNAME=$SERVICE_USER_DB
      - POSTGRESQL_PASSWORD=$SERVICE_PASSWORD_DB
      - POSTGRESQL_HOST=db
      - PGBOUNCER_DATABASE=api
      - POSTGRESQL_PORT=5432

      - POOL_MODE=transaction
      - ADMIN_USERS=$SERVICE_USER_DB,dbuser
      - PGBOUNCER_POOL_MODE=transaction
      - PGBOUNCER_MAX_CLIENT_CONN=1000
      - PGBOUNCER_MAX_DB_CONNECTIONS=200
      - PGBOUNCER_DEFAULT_POOL_SIZE=20
      - PGBOUNCER_RESERVE_POOL_SIZE=20
      - PGBOUNCER_RESERVE_POOL_TIMEOUT=5
      - PGBOUNCER_QUERY_WAIT_TIMEOUT=60
      - PGBOUNCER_IDLE_TRANSACTION_TIMEOUT=30

    ports:
      - '6432:6432'
    depends_on:
      - db
    healthcheck:
      test:
        - CMD
        - pg_isready
        - '-h'
        - localhost

volumes:
  db_data:
    driver: local

And this is the base64 encoded docker_compose_raw field:

dmVyc2lvbjogJzMuOCcKc2VydmljZXM6CiAgZGI6CiAgICBpbWFnZTogJ3BndmVjdG9yL3BndmVjdG9yOnBnMTYnCiAgICBjb250YWluZXJfbmFtZTogcG9zdGdyZXNfZGIKICAgIHBvcnRzOgogICAgICAtICc1NDMyOjU0MzInCiAgICByZXN0YXJ0OiBhbHdheXMKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBwZ19pc3JlYWR5CiAgICAgICAgLSAnLVUnCiAgICAgICAgLSBwb3N0Z3JlcwogICAgZW52aXJvbm1lbnQ6CiAgICAgICMgTm9tYnJlIGRlIGxhIGJhc2UgZGUgZGF0b3MgcXVlIGRlc2VlcyAoYXF1w60gbG8gZGVqYW1vcyBmaWpvIGNvbW8gImFwaSIpLgogICAgICBQT1NUR1JFU19EQjogYXBpCiAgICAgIAogICAgICAjIFVzdWFyaW8geSBjb250cmFzZcOxYSBnZW5lcmFkb3MgYXV0b23DoXRpY2FtZW50ZSBwb3IgQ29vbGlmeQogICAgICBQT1NUR1JFU19VU0VSOiAkU0VSVklDRV9VU0VSX0RCCiAgICAgIFBPU1RHUkVTX1BBU1NXT1JEOiAkU0VSVklDRV9QQVNTV09SRF9EQgoKICAgIHZvbHVtZXM6CiAgICAgIC0gJy4vaW5pdC5zcWw6L2RvY2tlci1lbnRyeXBvaW50LWluaXRkYi5kL2luaXQuc3FsJwogICAgICAtICdkYl9kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKCiAgcGdib3VuY2VyOgogICAgY29udGFpbmVyX25hbWU6IHBnYm91bmNlcgogICAgaW1hZ2U6ICdiaXRuYW1pL3BnYm91bmNlcjpsYXRlc3QnCiAgICBlbnZpcm9ubWVudDoKICAgICAgIyBSZXV0aWxpemFtb3MgbGFzIG1pc21hcyB2YXJpYWJsZXMgcGFyYSBwZ2JvdW5jZXIKICAgICAgLSBQT1NUR1JFU1FMX1VTRVJOQU1FPSRTRVJWSUNFX1VTRVJfREIKICAgICAgLSBQT1NUR1JFU1FMX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX0RCCiAgICAgIC0gUE9TVEdSRVNRTF9IT1NUPWRiCiAgICAgIC0gUEdCT1VOQ0VSX0RBVEFCQVNFPWFwaQogICAgICAtIFBPU1RHUkVTUUxfUE9SVD01NDMyCgogICAgICAtIFBPT0xfTU9ERT10cmFuc2FjdGlvbgogICAgICAtIEFETUlOX1VTRVJTPSRTRVJWSUNFX1VTRVJfREIsZGJ1c2VyCiAgICAgIC0gUEdCT1VOQ0VSX1BPT0xfTU9ERT10cmFuc2FjdGlvbgogICAgICAtIFBHQk9VTkNFUl9NQVhfQ0xJRU5UX0NPTk49MTAwMAogICAgICAtIFBHQk9VTkNFUl9NQVhfREJfQ09OTkVDVElPTlM9MjAwCiAgICAgIC0gUEdCT1VOQ0VSX0RFRkFVTFRfUE9PTF9TSVpFPTIwCiAgICAgIC0gUEdCT1VOQ0VSX1JFU0VSVkVfUE9PTF9TSVpFPTIwCiAgICAgIC0gUEdCT1VOQ0VSX1JFU0VSVkVfUE9PTF9USU1FT1VUPTUKICAgICAgLSBQR0JPVU5DRVJfUVVFUllfV0FJVF9USU1FT1VUPTYwCiAgICAgIC0gUEdCT1VOQ0VSX0lETEVfVFJBTlNBQ1RJT05fVElNRU9VVD0zMAoKICAgIHBvcnRzOgogICAgICAtICc2NDMyOjY0MzInCiAgICBkZXBlbmRzX29uOgogICAgICAtIGRiCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gcGdfaXNyZWFkeQogICAgICAgIC0gJy1oJwogICAgICAgIC0gbG9jYWxob3N0Cgp2b2x1bWVzOgogIGRiX2RhdGE6CiAgICBkcml2ZXI6IGxvY2FsCg==	

Steps to Reproduce

  1. send request to POST /api/v1/applications/dockercompose with base64 docker compose content

Example Repository URL

No response

Coolify Version

v4.0.0-beta.380

Are you using Coolify Cloud?

No (self-hosted)

Operating System and Version (self-hosted)

Ubuntu 22.04.5 LTS

Additional Information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions