#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