我有一个通过 docker compose 定义的服务(见下面的定义)。当我尝试通过 docker-compose -f up --wait -d my_service 启动此服务时,我收到错误
Error response from daemon: failed to create task for container: failed to initialize logging driver: dial unix /dev/log: connect: protocol wrong type for socket
在执行 docker compose cmd 的主机服务器上,我看到套接字存在并且我的用户具有写权限:
srw-rw-rw-. 1 root root 0 Aug 29 2023 /dev/log
服务定义:
my_service:
command: <omitted>
image: <omitted>
volumes:
- "/dev/log:/dev/log"
logging:
driver: "syslog"
options:
syslog-address: "unix:///dev/log"
tag: "my_service"
有谁知道是什么原因导致了这个错误?
网络上的 Syslog 使用 UDP 套接字;UDP 是一种基于数据报的协议,与流式 TCP 连接不同。
类似地,Unix 套接字上的 syslog 使用数据报协议。这意味着您需要使用
unixgram:///dev/log
而不是unix:///dev/log
:协议选项记录在syslog 日志驱动程序文档中。
另请参阅问题#18903 的讨论。