Articles of Docker

在Docker容器中发送电子邮件到运行postfix的主机smtp

在服务器上,我运行docker图像和后缀smtp服务器。 smtp服务器通过本地主机访问,并没有安装在任何types的容器。 问题是我可以通过terminal发送邮件在任何容器外使用sendemail,但我不能通过terminal运行sendemail发送电子邮件在任何容器内。 后缀configuration如下: # See /usr/share/postfix/main.cf.dist for a commented, more complete version # Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. #myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no # appending […]

在同一个dockernetworking中的另一个容器的发布的暴露端口上拒绝访问

我无法连接到同一个networking中的另一个容器。 docker run –rm –name spaceship –net lonelyisland –expose 8080 -p 8080:8080 –ip 172.18.0.8 quay.io/ahoi/spaceship:latest target/release/spaceship 根据我的理解, -p是不必要的,– –expose对于Dockerfile给出的是Dockerfile 。 该应用程序工作得很好,没有docker,所以它必须是一个docker(networking)相关的东西。 基于curl的testing的过程如下: docker run –rm -it –name "curl-test" –net lonelyisland fedora:latest /bin/bash test-curl设置 [root@52ac28b36b93 /]# dnf install iproute iputils Fedora 24 – x86_64 54 MB/s | 47 MB 00:00 Fedora 24 – x86_64 – Updates […]

如何将应用程序日志从Docker容器转发到ELK

我试图在使用多种应用程序技术(Java,Rails和各种DB)的环境中集中日志logging。 我们希望开发人员使用Docker Compose调用堆栈,但是我们希望他们引用中央日志源(ELK)来debugging问题,而不是尝试将Shell打开到正在运行的Docker容器中。 应用程序全部写入文件系统,而不是写入STDOUT / STDERR,STDOUT / STDERR会删除所有与Docker日志logging驱动程序相关的选项,也会删除logspout。 我们所做的是将容器configuration为让rsyslog包含应用程序日志文件,并将其转发到具有sysloginput的logstash。 这在将日志从A移动到B的过程中起作用,但是基于sysloginput来pipe理ELK中的多技术日志是非常糟糕的(例如尝试捕获多个Java堆栈跟踪或MySQL慢速查询)。 有一个更好的方法吗? 我应该在每个容器中运行logstash,以便我可以将filter和编解码器直接应用到日志文件,这样我就不必依赖sysloginput了。 有没有办法将Docker日志logging驱动程序与写入文件系统的应用程序日志文件结合使用?

如何获取特定AWS ECS任务的IP地址?

我试图在ECS中构build自己的服务发现版本,因为我希望扩展和缩减的服务不是HTTP服务器,所以不能由ELBpipe理。 此外, ECS还不支持docker的用户定义的networkingfunction,这将是另一种做服务发现的方式。 正如在这个问题讨论中提到的: 目前的服务发现是一个巨大的痛苦需要另一个服务(本身通常是基于群集,自我发现,然后监听其他服务)。 这是一个混乱的解决scheme,更不用说Lambda“解决scheme”,更难以执行和维护。 所以我要去讨厌的Lambda“解决scheme”路线来代替其他select。 我需要构build这个黑客服务发现的主要事情是在我的EC2主机上运行的每个Docker容器的IP地址。 通过SSH进入作为ECS容器实例之一的EC2服务器,我可以运行docker ps来获取每个正在运行的docker容器的容器id。 对于任何给定的containerId,我可以运行docker inspect ${containerId} ,它将返回JSON,包括有关该容器的许多详细信息,特别是绑定到该容器的NetworkSettings.IPAddress (我的发现实现所需的主要内容)。 我正尝试从Lambda内使用AWS SDK来获取此值。 这是我的Lambda函数到目前为止(你也应该能够运行这个 – 没有具体到我的设置这里): exports.handler = (event, context, callback) => { var AWS = require('aws-sdk'), ecs = new AWS.ECS({"apiVersion": '2014-11-13'}); ecs.listClusters({}, (err, data) => { data.clusterArns.map((clusterArn) => { ecs.listTasks({ cluster: clusterArn }, (err, data) => { ecs.describeTasks({ cluster: clusterArn, […]

防火墙+负载均衡器作为集群入口点 – 该怎么办?

我必须为我的公司build立一个生产环境,但是我对新架构的一个组件有一个问题。 我画了一张快照,告诉你今天是如何完成的,明天应该如何理解。 一切都使用Debian。 编辑:一切都存储在云,实际上在一个小主机,但我打算迁移到DO 今天 服务器可以访问互联网,并在NAT后面。 服务器安装了该post末尾所述的安全堆栈。 服务器直接在VM中安装软件。 这里的模式imgur Tomorow 服务器位于专用networking中。 Apache和MySQL在Docker容器中运行。 服务器位于负载平衡器/代理/防火墙之后。 如果需要,我可以运行PHP容器的集群。 编辑 – 根据答案imgur的新模式 我在哪里 老问题 入口点是我的问题,我不知道哪个软件用于代理/负载平衡。 我真的不明白我是否应该在群集模式下使用docker,因为我有两个不同的容器。 我不知道是否应该使用nginx,因为我已经有Apache处理HTTP请求。 我不明白如何容器可以访问互联网下载configuration文件为例(存储在外部git回购傀儡文件)。 实际上,我正在阅读大量的内容,并试图学习好的做法(比如在一个容器之外存储数据),但它仍然有点不清楚。 我有另一个应用程序与节点运行,我想应用相同的架构,只是用一个PM2 /节点容器replaceApache / PHP的容器,这就是为什么我问负载平衡。 我也可能需要PHP应用程序的负载平衡。 也许我完全错误的build筑更新,我应该留在今天的工作? 但是我觉得pipe理2台服务器的安全性是更危险的,因为我有更大的攻击面。 我也听说CSF会默认阻止docker工人,所以我必须编写额外的规则,我想避免它,但它会在群集模式下的docker工人开箱即用? 编辑:答案帮助我来到这一点,纠正我,如果我错了 安全 如果我理解你的消息,我应该按照2中的模式来设置。 首先我过滤所有传入的TCP / UDP连接到防火墙,阻止试图扫描端口的IP地址等。 然后我有我的代理将根据我打的端口路由SSH / HTTP / SFTP到正确的容器。 由于traefik可以监视一个群,我想它足以关注发生了什么事情。 我想通过SSH隧道SSH访问我的数据库虚拟机,以避免从代理到数据库虚拟机的路由。 (我知道该怎么做) 缩放 通过使用traefik,我现在可以添加一个协调器服务器,并添加我需要扩展的Apache + PHP容器。 监控 Traefik提供监控pipe理服务的好方法。 日志被发送到ELK堆栈以便可视化。 我也考虑将安全日志发送到ELK堆栈。 听起来不错 […]

如何在专用networking上运行12个不同的服务器?

我想在专用networking上运行12个独立的服务器。 我的意思是最终目标是我可以访问静态本地IP地址,如: 192.168.0.31 192.168.0.32 … 192.168.0.42 但我想通过将它们全部作为单独的docker容器在一台机器上运行来进行pipe理。 我已经做了一些以前的研究,我读入docker network create但我不完全确定这是做到这一点的正确方法。 如果任何人都可以提供一些指导,这将是伟大的。

与Jenkins Docker Plugin和Jenkins Docker Slaves混淆

所以我在某些方面感到惊喜,看到Jenkins Docker插件将Docker镜像“推送”到我的Docker主机金属中,但也令人困惑,因为我的构build发生在Docker主机金属上运行的Docker Slave容器中。 即使我的Jenkins大师在Docker容器中运行,而不是直接在金属上运行… 继这个受欢迎的jenkins大师/奴隶指南之后,我到达了Jenkinsbuild立在临时Docker容器中工作的地步。 这意味着,当我为Jenkins构build一些我的源代码软件组件/服务时,构build将在Jenkins从站中启动,这恰好是由Jenkins Docker插件启动的Docker容器。 Jenkins的工作空间在这个奴隶容器中,安装了Docker插件的Jenkins主,一旦构build完成,将处置这个奴隶容器。 看到我帮助解释的图表: 消化了这个图表后,一些重要的跟踪点: Jenkins Master和Jenkins Slave在同一个Docker主机金属上运行,因为我刚刚处于运行此系统的开始阶段 我正在使用Docker插件和SSH Slaves插件来完成此设置 所以在这个Docker Slave中,我的软件组件/服务构build工件被创build,例如,它可能是.dll或.war。 碰巧遇到这种情况,我的构build工件将成为Docker镜像。 为了清楚起见,我正在运行的Docker容器(Jenkins Slave)中构build一个Docker镜像。 我的困惑开始于我的期望,我应该不得不显式运行cmd推我的软件组件Docker镜像构build工件到Dockerregistry。 否则,当Jenkins构build作业完成时,Docker插件将closuresDocker容器从属,处理(rm)从属容器,并且将丢失该容器内的构build工件。 究竟发生了什么,为什么我感到惊喜,至less在短时间内,我正在开发并运行,是Docker镜像在docker主机上显示出来的。 我很惊讶,Docker插件会去这个水平的假设/帮助…我知道Docker插件允许您configuration一个Dockerregistry,并且您可以添加构build/发布到Docker Cloud,我假设云被视为图像的registry,也许也是运行这些图像的地方: 特别有趣的是,我没有使用Docker插件进行任何构build步骤,我只是使用Docker插件为构buildJenkinsconfiguration一个Slave容器。Item: 我唯一的构build步骤是我执行一个Shell脚本,是的,这个脚本碰巧最终build立一个Docker镜像,但Docker插件不知道这一点: Docker插件加速了Docker从属容器,我configuration了Docker插件,并告诉它一个Docker主机(在我的情况下,我的金属)Cloud是Docker插件调用Docker主机和Docker从属镜像以用于该Docker主机/云: 我只是误解了一个Jenkins构build工作空间时Docker从属容器内部发生的隔离问题吗? Docker插件只是默认使用唯一的Docker Cloud(我的Docker主机金属),我已经设置了所有任何Docker命令,我碰巧在Jenkins Docker slave容器中运行? (通过安装Docker-CE的方式,一个从属容器) 我的jenkins大师docker文件: #reference #https://engineering.riotgames.com/news/putting-jenkins-docker-container FROM jenkins:2.60.1 MAINTAINER Brian Ogden USER root #Timezone ENV TZ=America/Los_Angeles RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ […]

如何访问Docker容器的数据时,他们没有映射到一个卷?

如何访问Docker容器的数据( 没有映射到任何卷 ),当容器启动失败? 让我们说我开始这样的容器: docker run -it –name testContainer ubuntu /entrypoint.sh 和entrypoint.sh由于某种原因后来无法继续运行(换句话说容器实际上不启动),但我想获得存储在该容器中的某个date(例如/ var / www / html / XYZ ), 我怎样才能做到这一点?

Apache和docker

我有一个VPS在有线电视上,我想在运行LAMP堆栈的服务器上运行一个带有捷径的scala / lift应用程序。 我想使用彗星演员,所以我将使用“长的HTTP黑客”,我不知道这是否重要。 那么我有什么select? 我怎么能做到这一点? 我读有办法做到这一点与mod_rewrite和mod_proxy,但我不知道!

Docker:如何分区大型服务器?

所以在我的生产环境中,我有一个带有8个CPU和40G内存的戴尔XS23机架,内含vmware esxi。 我之前分区的方式是2个API服务器(四核,8gig ram)2个数据库服务器相同的规格,等等。 这样做的理由是具有负载平衡以及复制,故障转移等,但都运行在单一硬件上。 正如你可以看到你添加的虚拟机越多,显然在实际的操作系统上会浪费更多的磁盘/ CPU / RAM,所以在这种情况下,Docker会非常有利。 现在我的问题是,我应该只创build一个运行所有Docker容器的大型服务器,还是应该有我的虚拟机,并在其中运行docker(因为Dockertypes的目的不同):由于Docker相当新颖,在网上find很多文档我正在诉诸ServerFault社区的一些想法。 谢谢!