Почему docker-compose не может использовать вкладки в JSON-совместимом режиме? - PullRequest
2 голосов
/ 01 апреля 2019

При использовании docker-compose я предпочитаю использовать JSON вместо YAML, и в соответствии с официальной документацией , предоставленной Docker , его можно использовать:

enter image description here

Тем не менее, когда я пытаюсь запустить простой JSON-файл, совместимый с композицией, он выдает следующий вывод:

ERROR: yaml.scanner.ScannerError: while scanning for the next token
found character '\t' that cannot start any token
  in "./sample-file.json", line 2, column 1

Но если я заменю вкладкис пробелами, независимо от того, сколько (даже без единого пробела), он начинает работать:

Starting sandbox_apache_1 ... done
Attaching to sandbox_apache_1
apache_1  | AH00558: httpd: Could not reliably...

На рисунке четко написано "так любой файл JSON", что, кажется,быть неправдой.

Что с этим тогда?

1 Ответ

2 голосов
/ 01 апреля 2019

TL: DR: документация docker-compose вводит в заблуждение при цитировании функции YAML 1.2, когда они используют загрузчик на основе YAML 1.1 для загрузки своих файлов .yml.

Что работает при удаленииTAB объясняется тем, что по сути вы можете иметь очень компактный JSON: {"a":[1,2,3]} без каких-либо пробелов между узлами.


Да YAML - это расширенный набор JSON для всех практических целей, но есть несколько вещейчто вы должны иметь в виду.

Прежде всего вы должны взять документацию, которая не правильно пишет акроним (Yaml вместо YAML) и не ссылается непосредственно на spec ,но ссылки на неавторизованный с зерном соли.Кроме того, документация использует расширение .yml для файла docker-compose.yml, хотя рекомендуемое расширение файла для файлов YAML, согласно часто задаваемым вопросам на yaml.org, с сентября 2006 года .yaml.

Спецификация YAML 1.2 гласит, что он задуман как расширенный набор JSON, но docker-compose использует PyYAML для анализа / загрузки файла YAML и загружает только подмножество YAML 1.1.В YAML были внесены конкретные изменения с 1.1 до 1.2, чтобы сделать YAML 1.2 больше, но не на 100%, надмножеством JSON.

Символы TAB допускаются в YAML 1.2 для пробелов, если этоне пробел, который определяет отступ.Поскольку JSON - это YAML в стиле потока, в котором отступ не должен быть значительным, вы можете прочитать его, так как не должно быть табуляции перед начальными { или [.

В YAML 1.1 ограничение на использование TAB более строгое :

Символ игнорируемого пробела вне скалярного содержимого.Такие пространства используются для отступа и разделения между жетонами.Для обеспечения переносимости символы табуляции не должны использоваться в этих случаях, поскольку разные системы обрабатывают табуляцию по-разному.

(т. Е. Вы можете использовать символы TAB в непростых скалярах в YAML 1.1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...