使用时
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 文件中找到了一个很好的示例: