docker

xdebug Отладка запроса из другого docker контейнера (не с того, где IDE)

Проблема

Проблема заключается в том, что при запросе с GET-параметром (?XDEBUG_SESSION_START) из от одного микросервиса к другому (оба в разных контейнерах), сессия отладки в IDE на основной ОС не начинается (хотя IDE и ожидает соединения из контейнера).

При этом если делать тот же запрос (напрямую в контейнер микросервиса), напр. из postman-а - отладка работает нормально.

Конфиг xdebug-а внутри контейнера:

alpine docker nginx bad gateway 502 Переодически возникает ошибка

Возможный путь решения

  1. Откройте файлы лога ошибок и доступа nginx (напр. для alpine-образа это делается так, там они перенаправлены) -- это самый быстрый и стандартный путь чтобы понять что происходит
  2. Далее решаем проблему, в моем случае это это была ошибка ""upstream sent too big header while reading response header from upstream""

xdebug vscode docker Запуск и отладка PHP из командной строки, терминала или из браузера Пример launch.json

Примечание:

  • Эта инструкция - частный случай общей идеи настройки xDebug
  • Видео-обзор конфигурации ниже для запуска консольного скрипта: https://youtu.be/Br9l8yXNHZE

Конфиг xdebug

По аналогии с обычной установкой (см. наш пример для линукса) в xdebug.ini укажем 5 опций:

docker alpine Псевдонимы команд для терминалов alias (shell/bash)

Разберемся как создавать псевдонимы команд в alpine-контейнере, просто взять и написать в докерфайле:

RUN echo 'alias cept="./vendor/bin/codecept"' >> ~/.bashrc

-- по-умолчанию здесь не получится, дело в том, что:

  • 1) alpine linux не использует bash по умолчанию, а использует shell
  • 2) дело в том, как именно вы запускаете командную оболочку после старта контейнера

Действуем так:

docker postgres /docker-entrypoint-initdb.d Тире в имени базы и/или имени пользователя. Как настроить

Для поддержки тире в имени пользователя и БД, просто берем их в двойные кавычки.

Скрипт для /docker-entrypoint-initdb.d можно выглядеть напр. так (с поддержкой создания нескольких БД):

docker postgres Не запускается с первого раза при docker-compose up --build

Скорее всего причина в том, что у вас первый раз с ошибками выполняется какая-то инициализация, которая просто не запускается второй раз (почему все и "работает" со второго раза), напр. ошибки могут быть в скрипте инициализации docker-entrypoint-initdb.d.

В нашем случае проблема была в том, что скрипт не поддерживал имена БД пользователя и бд с тире (это можно либо добавить поддержку тире на уровне скрипта, либо использовать имена без тире).

docker postgres /docker-entrypoint-initdb.d Пользователь и БД не создаются заново при rebuild, реинициллизация

Дело в том, что /docker-entrypoint-initdb.d выполняется, только если у нас "пустые данные" - т.е. обычно при первом создании контейнера.

Как написано в документации:

scripts in /docker-entrypoint-initdb.d are only run if you start the container with a data directory that is empty; any pre-existing database will be left untouched on container startup

docker run The container name ... is already in use by container Ошибка

Error response from daemon: Conflict. The container name "/my-redis" is already in use by container ..... You have to remove (or rename) that container to be able to reuse that name.

-- как ответ на команду вроде:

Invalid address ...: It does not belong to any of this network's subnets Docker ошибка

ERROR: for ... Cannot start service ...: Invalid address 172.37.1.2: It does not belong to any of this network's subnets

Ошибка возникает при попытке запустить контейнеры:

docker-compose -f ./docker/docker-compose.yml up --build  --force-recreate 

Не работает для конфигурации:

Pages

Subscribe to RSS - docker