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

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

使用时

CMD ["/usr/sbin/sshd", "-D"]

在 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>

Docker 主机是 CentOS:

cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

Docker 日志记录后端是 journald:

grep ^OPTIONS /etc/sysconfig/docker
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'

我也尝试使用 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

答案1

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

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

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

简单的基于 Alpine 的 SSHD 服务器

相关内容