从Dockerlogin

我有一个rails应用程序通过docker运行。 我用docker-compose(config下面)调出应用程序。 整个应用程序涵盖了一个MySQL,Redis的,铁轨(包括sidekiq工人),nginx(与反应前端)和一个rsyslog服务器,转发所有日志Loggly

我的问题是相关的日志logging部分。 从所有服务的日志基本上得到转发,除了从我的日志从sidekiq。 当我用bundler exec sidekiq启动sidekiq时,日志输出到控制台(stdout),但是当我在rsyslog服务器上添加/ var / log / messages时,我没有看到它们。

在设置docker上的日志logging时,我遵循本教程:

https://medium.com/@yoanis_gil/logging-with-docker-part-1-b23ef1443aac

我的想法是,在docker容器中标准输出的所有内容都应该logging到docker日志机制中 – 并且使用我的设置,这意味着它应该进入syslog服务器。

docker构成文件:

 version: '3' services: nginx: image: nginx depends_on: - api - syslog ports: - "80:8080" logging: driver: syslog options: syslog-facility: "daemon" tag: "nginx" syslog-address: "tcp://localhost:5514" networks: - phototankswarm env_file: .env.dev volumes: - ./frontend/nginx/conf.d:/etc/nginx/conf.d - ./frontend/public:/www db: image: mysql env_file: .env.dev depends_on: - syslog networks: - phototankswarm ports: - "3306:3306" volumes: - ./backend/sql/data:/var/lib/mysql logging: driver: syslog options: syslog-facility: "daemon" tag: "mysql" syslog-address: "tcp://localhost:5514" redis: image: redis depends_on: - syslog networks: - phototankswarm logging: driver: syslog options: syslog-facility: "daemon" tag: "redis" syslog-address: "tcp://localhost:5514" api: image: pt-rails env_file: .env.dev networks: - phototankswarm command: > sh -c ' rails s -p 3000 -b 0.0.0.0; ' volumes: - /Users/martinhinge/Pictures/docker/phototank:/media/phototank - ./backend:/usr/src/app ports: - "3000:3000" depends_on: - db - redis - syslog logging: driver: syslog options: syslog-facility: "daemon" tag: "rails" syslog-address: "tcp://localhost:5514" syslog: image: syslog ports: - "localhost:5514:514" networks: - phototankswarm volumes: - /tmp:/var/log/syslog networks: phototankswarm: 

正如@Robert在注释中所build议的,解决scheme是将docker命令作为docker-compose文件中CMD的一部分运行:

我的撰写文件中的api服务因此变成:

 api: image: pt-rails env_file: .env.dev networks: - phototankswarm command: > sh -c ' bundle exec sidekiq -d -L /dev/stdout && bundle exec rails s -p 3000 -b 0.0.0.0 ' volumes: - /Users/martinhinge/Pictures/docker/phototank:/media/phototank - ./backend:/usr/src/app ports: - "3000:3000" depends_on: - db - redis - syslog logging: driver: syslog options: syslog-facility: "daemon" tag: "rails" syslog-address: "tcp://localhost:5514"