Когда используешь
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 ведется в журнале:
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
Использовать -e параметр командной строки для пересылки всех сообщений к стандартной ошибке (из документации sshd):
-e Записывайте журналы отладки в стандартную ошибку вместо системного журнала.
Я нашел хороший пример в следующем файле Docker: