Ответ
В Docker Compose порты необходимо экранировать (заключать в кавычки) в файлах docker-compose.yml из-за особенностей парсинга формата YAML. YAML-парсер может некорректно интерпретировать некоторые числовые или строковые комбинации, если они не заключены в кавычки.
Основные причины экранирования:
- Сложные форматы сопоставления портов: Когда требуется указать не только номера портов, но и IP-адрес хоста или протокол.
- Пример:
"127.0.0.1:8080:80"(привязка к конкретному IP) - Пример:
"443:443/tcp"(явное указание протокола)
- Пример:
- Предотвращение ошибок парсинга YAML: Некоторые комбинации чисел, разделенные двоеточием, могут быть интерпретированы YAML как специальные типы данных (например, время, шестнадцатеричные числа или даже одно большое число).
- Например,
123:456без кавычек может быть ошибочно воспринято как число123456или как время. Экранированиеports: - "123:456"гарантирует, что строка будет прочитана как есть.
- Например,
- Использование переменных окружения: Если часть строки порта формируется из переменной окружения, кавычки обеспечивают корректную интерполяцию и парсинг.
Пример без экранирования (для простых случаев, где кавычки не обязательны):
ports:
- 8080:80
Пример с экранированием (обязательно для сложных случаев и для надежности):
ports:
- "127.0.0.1:8080:80"
- "443:443/tcp"
- "8000:8000" # Рекомендуется для единообразия и предотвращения потенциальных проблем Ответ 18+ 🔞
А, вот эта тема про кавычки в Docker Compose, блядь! Ну, слушай, сейчас разжуёшь, как кот сука собака.
В общем, есть у них там, у этих ёбаных YAML-парсеров, прикол. Они, сука, такие умные, что начинают сами додумывать, что ты там написал. Вот представь: пишешь ты 123:456 — а он, этот парсер, такой: «О, ёпта, это что, время? Или, блядь, одно большое число? А может, это шестнадцатеричное, нахуй?» И начинает ебать мозги, вместо того чтобы просто взять и подставить порты как есть.
Поэтому, чтобы не было вот этого вот «сам от себя охуел», когда в пятницу вечером деплой ложится нахуй из-за какой-то хуйни, порты надо в кавычки заворачивать. Особенно когда начинается пиздопроебибна с IP-адресами или протоколами.
Смотри, вот пример, где без кавычек — вроде норм, но это как ходить по охуенно тонкому льду:
ports:
- 8080:80
А вот где уже точно надо, иначе пиздец:
ports:
- "127.0.0.1:8080:80" # Э, бошка думай, тут IP есть! Без кавычек — накрылся медным тазом.
- "443:443/tcp" # А тут, сука, протокол приплели! Тоже в кавычки, блядь.
И вообще, чувак, самый надёжный способ — просто всегда, блядь, закавычивать. Даже "8000:8000". Потому что доверия ебать ноль к этим парсерам. Один раз наступишь — и волнение ебать на всю ночь обеспечено.
Короче, правило простое: видишь двоеточие в портах — сразу кавычки, и никаких полупидорских решений. В рот меня чих-пых, зато спать спокойно будешь.