Ошибка
Я пытаюсь запустить контейнер logspout и установить формат журнала (переменная ENV) через файл docker-compose.Не так уж сложно, и если я запускаю его с docker-compose up
, все работает нормально.Но когда я пытаюсь запустить его с помощью docker swarm init
и docker stack deploy -c docker-compose.yml mystack
, я получаю сообщение об ошибке:
Ошибка ответа от демона: ошибка rpc: code = InvalidArgument desc = расширение env не удалось: расширение env"RAW_FORMAT = {\" container \ ": \" {{.Container.Name}} \ ", \" label \ ": {{toJSON .Container.Config.Labels}}, \" timestamp \ ": \" {{.Time.Format \ "2006-01-02T15: 04: 05Z07: 00 \"}} \ ", \" source \ ": \" {{.Source}} \ ", \" message \ ": {{toJSON .Data}}} ": template: расширение: 1: функция" toJSON "не определена
Что я понимаю
Я думаю, что у меня ошибка только с роем, а не с докером-compose, потому что переменная ENV, которую я хочу передать в logspout:
RAW_FORMAT: '{"container": "{{.Container.Name}}", "tags": {{toJSON.Container.Config.Labels}}, "отметка времени": "{{.Time.Format" 2006-01-02T15: 04: 05Z07: 00 "}}", "source": "{{.Source}}","message": {{toJSON .Data}}} '
Эта переменная ENV содержит шаблон go.Но в режиме роя вы можете создавать сервисы, используя go-шаблоны .Похоже, что Swarm пытается (и не может) проанализировать значение переменной ENV, которую я просто хочу передать в контейнер logspout.
Мой вопрос
Isэто способ сказать рое не анализировать go-шаблон в моей переменной RAW_FORMAT?
Если нет, есть ли другой способ установить эту переменную на правильное значение?
Подробнее ...
Если вы хотите воспроизвести эту проблему, вот минимальный файл для создания docker:
version: "3.3"
services:
logspout:
image: gliderlabs/logspout:latest
volumes:
- /etc/hostname:/etc/host_hostname:ro
- /var/run/docker.sock:/var/run/docker.sock
environment:
RAW_FORMAT: '{ "container" : "{{ .Container.Name }}", "labels": {{ toJSON .Container.Config.Labels }}, "timestamp": "{{ .Time.Format "2006-01-02T15:04:05Z07:00" }}", "source" : "{{ .Source }}", "message": {{ toJSON .Data }} }'
Если вы работаете в Windows, вы должны сначала выполнить $Env:COMPOSE_CONVERT_WINDOWS_PATHS=1
.