Docker compose — services.vulcain.ports содержит недопустимый тип, это должно быть число или объект

#docker #symfony #docker-compose #api-platform.com

#docker #symfony #docker-compose #api-platform.com

Вопрос:

Я использую Symfony и docker и считаю, что допустил ошибку при настройке этих двух, из-за чего я столкнулся с этой ошибкой в docker compose :

services.vulcain.ports contains an invalid type, it should be a number, or an object

при выполнении команды docker compose :

dc exec php vendor/bin/simple-phpunit --filter 'App\Tests\EntityTests::testName'

Я уточню, что проблема может быть в архитектуре моей папки:

У меня есть папка /project , которая является маршрутом проекта

В котором есть две папки /frontend и /backend , плюс этот скрипт для запуска назад и вперед:

 #!/bin/bash

docker-compose -f backend/docker-compose.yml up -d ; 
docker-compose -f frontend/docker-compose.yml up -d ;
  

/frontend для меня это не имеет значения, я запустил свои команды из /api fodler

Который сам содержит /docker (с dockerfile) и /api папку и мой docker-compose .

Мое docker-compose взято из документации api-платформы:

 version: '3.4'

x-cache-from:
  - amp;api-cache-from
    cache_from:
      - ${NGINX_IMAGE:-quay.io/api-platform/nginx}
      - ${PHP_IMAGE:-quay.io/api-platform/php}

services:
  php:
    build:
      context: ./api
      target: api_platform_php
      <<: *api-cache-from
    image: ${PHP_IMAGE:-quay.io/api-platform/php}
    healthcheck:
      interval: 10s
      timeout: 3s
      retries: 3
      start_period: 30s
    depends_on:
      - db
      - dev-tls
    volumes:
      - ./api:/srv/api:rw,cached
      - ./api/docker/php/conf.d/api-platform.dev.ini:/usr/local/etc/php/conf.d/api-platform.ini
      - dev-certs:/certs:ro,nocopy
    networks:
      - symfony

  api:
    build:
      context: ./api
      target: api_platform_nginx
      <<: *api-cache-from
    image: ${NGINX_IMAGE:-quay.io/api-platform/nginx}
    depends_on:
      - php
    volumes:
      - ./api/public:/srv/api/public:ro
    networks:
      - symfony

  vulcain:
    image: dunglas/vulcain
    environment:
      - CERT_FILE=/certs/localhost.crt
      - KEY_FILE=/certs/localhost.key
      - UPSTREAM=http://api
    depends_on:
      - api
      - dev-tls
    volumes:
      - dev-certs:/certs:ro,nocopy
    ports:
      - ${VULC_TARGET}:${VULC_PUBLISHED}
    networks:
      - symfony

  db:
    image: postgres:12-alpine
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_USER=${POSTGRES_USER}
    volumes:
      - db-data:/var/lib/postgresql/data:rw
    ports:
      - "${DB_TARGET}:${DB_PUBLISHED}"
    networks:
      - symfony

  mercure:
    image: dunglas/mercure
    environment:
      - ALLOW_ANONYMOUS=1
      - CERT_FILE=/certs/localhost.crt
      - CORS_ALLOWED_ORIGINS=*
      - DEMO=1
      - JWT_KEY=${JWT_KEY}
      - KEY_FILE=/certs/localhost.key
      - PUBLISH_ALLOWED_ORIGINS=https://localhost:1337
    depends_on:
      - dev-tls
    volumes:
      - dev-certs:/certs:ro,nocopy
    ports:
      - "${MERC_TARGET}:${MERC_PUBLISHED}"
    networks:
      - symfony

  dev-tls:
    build:
      context: ./docker/dev-tls
    volumes:
      - dev-certs:/certs:rw
    ports:
      - target: 80
        published: 80
        protocol: tcp
    networks:
      - symfony

volumes:
  db-data: {}
  dev-certs: {}

networks:
  symfony:
    driver: bridge
  

И ошибки:

 ERROR: The Compose file './../docker-compose.yml' is invalid because:
services.db.ports contains an invalid type, it should be a number, or an object
services.mercure.ports contains an invalid type, it should be a number, or an object
services.vulcain.ports contains an invalid type, it should be a number, or an object
  

это происходит из-за того, как я уточняю порты в моем docker-compose, учитывая, что они пришли из файла .env, расположенного в /backend папке, и я выполняю свою команду на одну папку ниже в /api папке.

Но если я выполняю ту же команду из /backend , я получаю это сообщение :

 Time: 115 ms, Memory: 6.00 MB

No tests executed!

Other deprecation notices (1)

  1x: Since symfony/dotenv 5.1: Passing a boolean to the constructor of "SymfonyComponentDotenvDotenv" is deprecated, use "Dotenv::usePutenv()".
    1x in Dotenv::__construct from SymfonyComponentDotenv

  

У кого-нибудь есть идеи, как это исправить?

Ответ №1:

Когда вы запускаете «docker-compose up», вы, вероятно, также получаете следующие предупреждения:

 kalou@shinwey:~/t$ docker-compose  up
WARNING: The VULC_TARGET variable is not set. Defaulting to a blank string.
WARNING: The VULC_PUBLISHED variable is not set. Defaulting to a blank string.
WARNING: The DB_TARGET variable is not set. Defaulting to a blank string.
WARNING: The DB_PUBLISHED variable is not set. Defaulting to a blank string.
WARNING: The MERC_TARGET variable is not set. Defaulting to a blank string.
WARNING: The MERC_PUBLISHED variable is not set. Defaulting to a blank string.
ERROR: The Compose file './docker-compose.yml' is invalid because:

services.db.ports contains an invalid type, it should be a number, or an object
services.mercure.ports contains an invalid type, it should be a number, or an object
services.vulcain.ports contains an invalid type, it should be a number, or an object
  

Эти 6 переменных должны быть установлены перед командой «docker-compose up».

Комментарии:

1. нет, это странная часть, docker-compose up я не получил никакого предупреждения об этом, что означает, что ему удается их найти

2. Пожалуйста, добавьте опцию ‘—ПРЕДУПРЕЖДЕНИЕ на уровне журнала’ к вашему вызову docker-compose

3. Я тестировал как таковой docker-compose -f --log-level WARNING jcup/docker-compose.yml up -d; или docker-compose -f jcup/docker-compose.yml up -d --log-level WARNING; но версия docker-compose , которую я использую, не знает этой опции. Я использую 3.4

Ответ №2:

пожалуйста, попробуйте удалить ваши контейнеры с помощью соответствующего —env-файла, например

 docker-compose --env-file .config/.env.prod down