Docker 容器中的 SSHd 日志未通过“docker 日志”显示

Wil*_*lem 7 ssh logging stdout docker

使用时

CMD ["/usr/sbin/sshd", "-D"]
Run Code Online (Sandbox Code Playgroud)

在 Dockerfile 中,docker logs不显示日志记录:

cat > Dockerfile.stdout <<EOF
FROM alpine:latest
RUN    apk add --no-cache openssh-server \
    && mkdir /var/run/sshd \
    && ssh-keygen -A
CMD ["/usr/sbin/sshd", "-D"]
EOF

docker build -f Dockerfile.stdout -t sshd-stdout .

docker run --name sshd-stdout -d sshd-stdout

docker logs sshd-stdout
<empty>
Run Code Online (Sandbox Code Playgroud)

Docker主机是CentOS:

cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
Run Code Online (Sandbox Code Playgroud)

Docker 日志记录后端是日志记录:

grep ^OPTIONS /etc/sysconfig/docker
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'
Run Code Online (Sandbox Code Playgroud)

我也尝试使用 json 作为日志记录后端,但没有成功。

如何正确“转发”日志记录?


正如@marioavs 所建议的,“-e”是必要的。我尝试过“-e”和“-D”,但不同时尝试。所以:

cat > Dockerfile.stdout <<EOF
FROM alpine:latest
RUN    apk add --no-cache openssh-server \
    && mkdir /var/run/sshd \
    && ssh-keygen -A
CMD ["/usr/sbin/sshd", "-D", "-e"]
EOF
Run Code Online (Sandbox Code Playgroud)

小智 8

使用-e命令行选项将所有消息转发到标准错误(来自 sshd 文档):

-e将调试日志写入标准错误而不是系统日志。

我在以下 Docker 文件中找到了一个很好的示例:

简单的基于 alpine 的 SSHD 服务器