根据到 Docker 官方文档 https://docs.docker.com/reference/logging/overview/,可以得到stdout
and stderr
容器的输出为GELF消息 https://www.graylog.org/resources/gelf/这是一种可以被例如理解的格式格雷日志/格雷日志2 https://www.graylog.org/ and logstash https://www.elastic.co/products/logstash.
当我从命令行手动运行容器时,这工作得很好。例如,
docker run --log-driver=gelf --log-opt gelf-address=udp://localhost:12201 busybox echo This is my message.
将向在本地主机上运行的 Graylog2 服务器发送一条日志消息,该服务器在端口 12201 处配置了 UDP 输入侦听器。
现在,我想使用相同的日志选项docker 撰写 https://docs.docker.com/compose/根据文档,原则上应该是可以的 https://docs.docker.com/compose/yml/#log-driver。但是,文档没有提到任何日志格式,而是json-file
, syslog
and none
当我包括类似的东西时
my-container:
container_name: ...
build: ...
ports: ...
log_driver: "gelf"
log_opt:
gelf-address: "udp://localhost:12201"
in my docker-compose.yml
然后归档docker-compose up
失败并显示:
Traceback (most recent call last):
File "<string>", line 3, in <module>
File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.main", line 39, in main
File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.docopt_command", line 21, in sys_dispatch
File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.command", line 27, in dispatch
File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.docopt_command", line 24, in dispatch
File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.command", line 59, in perform_command
File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.main", line 495, in up
File "/code/build/docker-compose/out00-PYZ.pyz/compose.project", line 265, in up
File "/code/build/docker-compose/out00-PYZ.pyz/compose.service", line 369, in execute_convergence_plan
File "/code/build/docker-compose/out00-PYZ.pyz/compose.service", line 270, in create_container
File "/code/build/docker-compose/out00-PYZ.pyz/compose.service", line 643, in _get_container_create_options
File "/code/build/docker-compose/out00-PYZ.pyz/compose.service", line 656, in _get_container_host_config
File "/code/build/docker-compose/out00-PYZ.pyz/docker.utils.types", line 27, in __init__
ValueError: LogConfig.type must be one of (json-file, syslog, none)
根据记录,这是在 docker-compose 1.4.0 和 docker 1.8.1(构建 d12ea79)上进行的。
显然,Docker 和 docker-compose 在这里的实现级别并不相同。我刚刚发现这个问题已经解决并包含在Master branch
在 Github 上,请参阅https://github.com/docker/compose/issues/1869 https://github.com/docker/compose/issues/1869
and
https://github.com/docker/docker-py/pull/724 https://github.com/docker/docker-py/pull/724 .
有没有办法从当前的 Master 分支重新安装 docker-compose 或手动将其添加到现有安装中?我找不到提交到主机上任何位置的文件...