无法将 docker-registry stdout 传送到日志文件

无法将 docker-registry stdout 传送到日志文件

今天下午我一直在尝试(但徒劳无功)试图阻止 docker-registry 写入标准输出而是写入日志,但我认为底层 Python 正在创建似乎绕过所有传输到日志的努力的进程。

我已尝试使用通常的方法>以及2>&1通过管道传输各种命令但一切似乎都超出了我的掌握。

有什么办法我可以得到全部此命令的输出直接进入日志而不是标准输出?

[编辑]

这是我用来启动它的脚本,它是我计划用作服务的 shell 脚本的一部分

start() {
  # Sugar
  echo -e "Starting registry"

  # Run the registry
  export LOGLEVEL=NOTSET
  export AWS_BUCKET=$TargetBucket
  export AWS_KEY=$AWSAccessKey
  export AWS_SECRET=$AWSSecretKey
  docker-registry & 2>&1 | tee $LogFile

  # Create a lock file
  touch $LockFile
}

答案1

万一其他人仍在寻找答案,我最近才意识到这一点。

当您安装 docker-registry rpm 并启动服务时,日志文件将存储在 systemd 日志文件本身内。

以下是检索日志的命令:sudo journalctl -fu docker-registry.service

获取docker日志的方法也是一样的。

您还可以编辑 /usr/lib/systemd/system/docker-registry.service,将 --access-logfile 后面的 - 替换为所需的文件。需要重启服务。

答案2

使用 EPEL 中提供的预编译软件包可以让您的生活更轻松:docker-io-1.0.0-6.el6.x86_64.rpmdocker-registry-0.7.1-2.el6.noarch.rpm截至本文撰写时。

您将拥有并且已经可以运行的服务脚本(无需自行编写),您将收到更新(比重新编译或重新安装更容易pip)和操作系统集成。

您的日志问题消失了,因为日志是在/etc/docker-registry.yaml文件中配置的(引用自/etc/sysconfig/docker-registry使用DOCKER_REGISTRY_CONFIG=/etc/docker-registry.yml

loglevel:您可以使用部分中的指令定义日志指向的位置common,或者使用每个提供程序来定义日志指向的位置*_logfile:

如果您愿意坚持手动安装,请注意通常docker-registry由提供服务gunicorn,使用以下命令(这是从 Fedora 20 安装中获取的,应该不会有太大区别):

/usr/bin/gunicorn --access-logfile - --debug --max-requests 100 --graceful-timeout 3600 \
  -t 3600 -k gevent -b ${REGISTRY_ADDRESS}:${REGISTRY_PORT} -w $GUNICORN_WORKERS \
  docker_registry.wsgi:application

--access-logfile存在stdin是一个systemd事物)

相关内容