将docker日志获取到graylog2和本地

我一直在这个问题上工作了几天,没有find答案的运气。 设置是我有几个主机运行Docker容器组,我需要所有容器日志的本地副本,并在一个集中的graylog2服务器上。 graylog2服务器已启动并运行,并在端口9000上具有GELFinput,在514上具有系统日志UDPinput。 最初,容器正在login到Docker主机上的JSON文件。 然后,我改变了docker中的日志驱动程序使用GELF并发送到graylog2服务器。 这工作得很好,但事实certificate我们也需要本地的日志副本。 最好的部分是,graylog上的日志有很好的填充字段,包括“container_name”和“source”(这是docker主机的主机名)。 所以我恢复到使容器日志到JSON,然后只是将JSON日志发送到graylog2,但是当我这样做时,graylog2只显示一个包含源,container_name,container_id,但没有任何的相应字段。 然后,我试着将日志驱动更改为syslog,然后让rsyslog或syslog-ng将日志的副本发送给graylog2,但是在graylog2上创build的条目缺less一堆数据,这次消息只包含实际的消息,根本就没有关于container_name或container_id的信息。 然后,我尝试将日志驱动程序更改回GELF,并使syslog-ng在每个docker主机上侦听,docker正在将日志发送到正在坐的主机。 这和上面的解决scheme#2有相似的结果,所以我看到一个非常长的包含host,container_name,container_id,timestamp等的“message”字段,但是graylog2似乎并不想填充相应的字段。 此外,在这种方法中,所有日志都将日志源设置为docker主机的IP地址,即使我使用的是主机名。 我试着安装graylog-collector-sidecar,但是这似乎并没有工作。 有没有人有从哪里去的build议? 我想选项#3会好,如果我能以某种方式包括至lesscontainer_name显示(也许有一个标签)。 另一个我认为是好的解决scheme是,如果我能得到#4实际上填充字段,意思而不是这样: source: $IP message: $IP {"version","1.1","host":"$HOSTNAME","message":"$MESSAGE","container_name":"$CONTAINER_NAME","container_id":"$CONTAINER_ID",etc etc} 它应该显示这个: source: $HOSTNAME container_name: $CONTAINER_NAME container_id: $CONTAINER_ID message: $MESSAGE 任何人都知道我可以如何让graylog2(或syslog-ng)来格式化日志数据,使其看起来像下面的例子? 请注意,当我使用GELF日志驱动程序将日志数据直接从docker发送到graylog2时,数据确实以该格式显示,而且非常棒,我们只需要在本地保留一份日志的副本。 预先感谢您的任何意见! -Martin

requirements.txt中的依赖关系未安装

我需要部署一个烧瓶应用程序到谷歌应用程序引擎。 我使用docker和线路在Dockerfile中: ADD requirements.txt /app/requirements.txt RUN pip install -r /app/requirements.txt 在requirements.txt文件中: Flask==0.12 gunicorn==19.6.0 boto==2.46.1 gcs-oauth2-boto-plugin==1.8 ffmpeg-normalize 它应该安装所有的依赖关系。 但不知何故“ffmpeg正常化”没有安装在谷歌应用程序引擎实例。 任何人都可以帮助我吗? 如果还有另一种更好的方式来安装软件包,我也会很乐意去做。 谢谢!!

更新Docker容器的Ruby bin文件夹的正确方法是什么?

我一直在转换一个现有的Ruby on Rails应用程序在docker容器中开发。 我不明白在哪里最好把rake rails:update:bin命令。 我试图把它作为docker文件的最后一行,但容器将无法正常启动。 我可以让容器启动的唯一方法是在图像构build之外构buildbin,以便使用ADD命令来拉取bin文件夹。 是否有可能创build一个dockerfile来完成所有的事情? Docker文件看起来像这样 FROM ruby:2.2 RUN apt-get update && apt-get install -y \ build-essential \ libpq-dev \ nodejs RUN mkdir /MyApp WORKDIR /MyApp ADD Gemfile /MyApp/Gemfile ADD Gemfile.lock /MyApp/Gemfile.lock RUN bundle install ADD . /MyApp 我想添加下面一行到最后。 RUN rake rails:update:bin 当我尝试包括rake命令时,我正在重buildMyApp文件夹中没有bin文件夹的图像。 当我离开rake命令时,我正在用bin文件夹重build图像。 而且我知道我真的重build图像,因为我重build它们之前删除caching的版本。

Docker组合和并发集成testing

编辑:对不起,我错了这个问题的第一部分。 所以我有一个docker-compose.yaml在同步运行时工作正常: server: build: . dockerfile: "./docker/integration_tests/server/Dockerfile" links: – mongo environment: – "MONGO_URI=mongodb://mongo:27017/company" mongo: image: 'mongo:3.2.6' ports: – "27017" 当用这个命令启动时: docker-compose build && docker-compose up –abort-on-container-exit 然而,当我启动两三个工作来testing它是否并行工作(这是jenkins使用pipe道,所以他们有不同的目录)我看到这个工作A: Successfully built 7b23b3a7b823 + docker-compose up –abort-on-container-exit Creating companyservercicd3_mongo_1 ERROR: for mongo Cannot start service mongo: driver failed programming external connectivity on endpoint companyservercicd3_mongo_1 (422826f73ce76526e4072f72a2b44467f9080e79a24d37d1fe2bba903854a698): Bind for 0.0.0.0:27017 […]

移动了VM实例 – 通过docker-machine重新连接

我的OpenStack VM容器已经被移到一个新的位置,需要一个新的IP地址。 我最初用docker-machine创build了这些容器。 我怎样才能重新configurationdocker机重新获得我的虚拟机实例?

Docker php:5.6-apache 403(因为path的组件上缺lesssearch权限)

文件树: ├── docker-compose.yml ├── Dockerfile └── www └── index.html Dockerfile: FROM php:5.6-apache ADD ./www /var/www/html/ WORKDIR /var/www/html/ 泊坞窗,compose.yml version: '2' services: php5_6: build: . ports : – "80:80" volumes: – ./www:/var/www/html/ 尝试启动docker $ docker-compose up [core:error] [pid 17] (13)Permission denied: [client 172.19.0.1:53514] AH00035: access to /index.html denied (filesystem path '/var/www/html/index.html') because search permissions are missing […]

在Docker上的Eureka上获取正确的域名

我正在微服务体系结构上使用Spring框架,我正在使用带有自签名证书(* .mydomainname.fr)的HTTPS。 作为注册我使用尤里卡和作为代理我使用Zuul。 所以我的服务必须在名为"service-name".mydomainname.fr Eureka上注册,因为我的证书。 此外,我暂时不使用DNS,我只是在/ etc / hosts(127.0.0.1 register.bec3.fr)中手动添加域名。 在这里,我的微服务架构。 我想用docker-composedocker把我所有的服务都装上去。 我的docker-compose.yml是: version: '3' services: registration-service: image: maven:alpine container_name: register.bec3.fr working_dir: /usr/src/spring-boot-app volumes: – ./scripts:/usr/src/spring-boot-app/scripts – ./sslcert:/usr/src/spring-boot-app/ssl – ./registration-service:/usr/src/spring-boot-app – ./.m2:/root/.m2 expose: – 8761 entrypoint: bash -c "keytool -noprompt -import -alias ioteam.bec3 -file /usr/src/spring-boot-app/ssl/ioteam.pem -keystore /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts -storepass xxxxxx && mvn -Dspring.profiles.active=docker spring-boot:run" #entrypoint: bash […]

托pipe在centos:centos7 docker容器上的Tomcat无法查看容器外部的网页

我设置了一个docker容器,它有一个172.17.0.2的nat'd ip(从我的centos virtualbox映像,通过nat)。 如果我进入容器的IP(我知道,不好的做法)ssh并打开Firefox,我可以看到服务托pipe在172.17.0.2:8080,但在容器外我不能(虽然我可以ping它)。 我最初认为这是一个防火墙规则,但图像甚至不支持防火墙访问(虽然主机虚拟机)。 我做了一个docker运行–expose = 8080到容器,它仍然导致我无法查看容器上托pipe的Web服务。 我宁愿使用docker的IP来查看内容,而不是尝试通过主机的IP转发端口(即我的virtualbox图像这是一个192.168.3.x地址)。 我认为这可能是在virtualbox图像本身(vs容器)上的防火墙问题。 如果是这样,我很困惑,networking的工作原理,因为我的docker集装箱似乎有一个虚拟的NAT NAT。

Ubuntu 16.10上的ASP.NET Core Docker端口转发

我无法访问在Docker窗体主机上运行的ASP.NET Core应用程序。 Dockerfile: FROM microsoft/dotnet:latest WORKDIR /app ENV ASPNETCORE_URLS http://*:5000 EXPOSE 5000 我像这样运行它: docker run -v $(pwd):/app -p 5000:5000 -it dotnet从应用程序目录中得到的docker run -v $(pwd):/app -p 5000:5000 -it dotnet 。 然后我在附加容器里面执行dotnet run命令,得到的结果是: 内容根path:/ app 现在聆听:http:// *:5000 应用程序启动 按下Ctrl + Cclosures。 我也尝试运行dotnet run –server.urls=http://*:5000直接传递属性到红隼。 不幸的是,我不能通过使用本地主机,主机IP地址和容器的IP地址从主机访问服务器。 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES […]

对于Web应用程序,为模板和api服务器分配两个容器是否有意义?

一个聪明但没有经验的程序员以如下方式向我们的服务介绍了dev-ops: 运行包含前端构build的html模板的服务器通过Docker容器部署到ECS,然后部署到启用了负载平衡的Elastic Beanstalk。 前端构build依赖的api服务器也通过启用了负载平衡的Docker + Elastic Beanstalk部署到ECS。 扮演将SSL和代理应用于模板服务器和api服务器的angular色的ec2实例(nginx +)。 这是入口点,但负载平衡器未连接。 我批准了分离前端和api环境的举措,这允许我们的开发人员在不影响另一个的情况下提交一个代码。 然而,AWS的这种安排,即使在技术上是function性的,似乎也是有缺陷的。 我听说Application Load Balancer可以兼顾SSL和代理服务器,但是我不知道如何在我们的服务涉及两个单独的容器的情况下应用它。 我的问题是: 使用Docker,ECS,Elastic Beanstalk和Application Load Balancer部署前端和api服务器的最痛苦的方式是什么? 是否还有其他CI /自动化工具可以推荐您尽可能无忧无虑地进行部署? 谢谢!