目前我们是在单个 docker 容器上运行的应用程序,该应用程序需要将各种敏感数据作为环境变量传递,
我将它们放在运行命令中,这样它们就不会出现在图像中,然后出现在存储库中,但是我最终得到了一个非常不安全的运行命令,
现在,我知道存在 docker 机密,但是,如何在不部署集群的情况下使用它们?或者有没有其他方法来保护这些数据?
此致,
我有一个带有 3 个节点的 docker swarm 配置。有一个网络仅位于其中一个节点上。在该特定节点上,docker network ls显示网络,显示docker network rm [network-id]“来自守护进程的错误响应:网络...未找到”,同时docker network inspect [network-id]显示网络,它看起来不错(范围:swarm,驱动程序:覆盖)。完全像我并行创建的测试方式来比较它。有人知道吗?我怎样才能摆脱那个网络僵尸?
我们在几个节点上以 swarm 模式运行 docker。
找不到一种快速简便的方法来从管理器节点列出 swarm 中的所有容器(最好带有状态)。人们可以看到覆盖网络和连接到这些网络的本地运行的容器,还有服务——但不能看到容器的详细信息等。
它是否已经可用,或者使用 REST API 是唯一可用的选项?(但不确定那里是否提供了所有必需的信息)
我正在使用 docker swarm 运行 Spring Boot 应用程序,并且我使用 postgres 作为数据库。当我将它们都作为 docker 服务运行时,数据库连接会持续且随机地失败(如您在时间戳上所见),如日志所示:
2017-10-26T 17:14:15 .200415747Z app-db.1.1ayo6h8ro1og@scw-c2964a | 日志:无法从客户端接收数据:对等方重置连接
2017-10-26T 17:43:36 .481718562Z app-db.1.1ayo6h8ro1og@scw-c2964a | 日志:无法从客户端接收数据:对等方重置连接
2017-10-26T 17:43:56 .954152654Z app-db.1.1ayo6h8ro1og@scw-c2964a | 日志:无法从客户端接收数据:对等方重置连接
2017-10-26T 17:44:17 .434171472Z app-db.1.1ayo6h8ro1og@scw-c2964a | 日志:无法从客户端接收数据:对等方重置连接
2017-10-26T 17:49:04 .154174253Z app-db.1.1ayo6h8ro1og@scw-c2964a | 日志:无法从客户端接收数据:对等方重置连接
我无法理解或发现这样做的原因。我很感激任何想法。
编辑:
我们意识到,在测试应用程序时,它也会抛出这样的错误:
SQLTransientConnectionException: HikariPool-1 - 连接不可用,请求在 937517 毫秒后超时
谢谢。
我正在使用 Docker 以 swarm 模式(使用 Docker 17.03.1-ce)进行生产设置。将涉及2个数据中心。在两个数据中心,所有机器在私有网络上都有一个公共 IP 和一个私有(数据中心本地)IP,所以会有 2 个私有网络。
专用网络接口上的网络流量是免费的,而公共接口上的流量不受限制(而且速度较慢),因此在可能的情况下,我更希望网络流量通过专用接口。
现在,据我所知(我认为),集群模式下 Docker 节点之间的所有流量都将通过用于与集群主机通信的相同网络接口,在我的情况下,必须是公共接口才能进行多 DC 网络可能的。然而,大多数预期的流量将在同一个 DC 中的节点之间发生,如果源节点和目标节点碰巧在同一个私有网络上,如果 Docker 能够以某种方式通过我的私有网络路由流量,那就太好了。
恐怕这可能无法开箱即用,因为群主不知道这些专用网络以及节点在其上拥有的 IP。
我能想到的一个解决方案是设置一个 VPN 并在其上部署 swarm,但这会增加额外的复杂性,我更喜欢纯 Docker swarm 解决方案。
更新:正如评论中所建议的,解决方案的基础可能是使用 iptables 将传出流量路由到私有 IP 而不是公共 IP。但是,如果我想这样做,我的下一个问题将是如何管理所有这些规则。在 DC 中有 10 个服务器,我需要 10 * 9 = 90 个服务器来通过专用网络路由所有可能的本地流量。我可以想象,也许存在一些工具可以帮助完成这样的任务,或者我可以创建一个,但也许有一种更简单的方法来做到这一点。
我有一个 docker swarm 配置,在那里我部署了两个堆栈(main和mon),我可以在一个堆栈中公开一个端口,我可以从另一个堆栈中引用它。但是,我试图找到一种不这样做的方法,而是让它使用 127.0.0.11 DNS 访问它。
在mon我有一项名为grafana
使用https://docs.docker.com/docker-cloud/apps/service-links/#discovering-services-or-containers-on-another-stack这表明我可以使用堆栈名称来引用它没有当我尝试ping grafana.mon它时,它只返回无效的主机名。
我很难弄清楚HEALTHCHECK在 swarm 模式下运行 Docker 时的真正用途。
一个地方建议Docker 将重新启动一项被认为是不健康的任务。另一个地方解释说 Docker 将停止向不健康的任务发送流量。Docker 文档本身只解释了HEALTHCHECK指令是什么,以及如何配置它。它没有试图解释当任务不健康时会发生什么。
换句话说,我正在努力寻找一个清晰可靠的解释来解释什么是HEALTCHECK真正的。
此外,查看Docker REST API,这个特定的数据(任务是否健康)甚至没有为任务公开(尽管它为容器公开)。这使得使用该指标来监控 Docker Swarm 变得很困难,所以在我看来,这也不是该指标的主要目的。
当在 swarm 模式下运行 Docker 时任务变得不健康时,真正会发生什么?
我使用janus-gateway作为用于群组视频通话的 webrtc 媒体服务器。以前我使用 docker-compose 将它部署在单个节点中,但现在我希望能够水平扩展它。为此,我正在尝试使用 kubernetes,但我面临两个问题:
1:指定要为媒体服务器公开的端口范围。由于媒体服务器需要一个端口范围才能运行,我可以在 docker-compose 中使用以下代码进行操作
janus-gateway:
build: ./gateway
image: janus-gateway-image
restart: always
ports:
- 8088:8088
- 8188:8188
- 7088:7088
- "10000-10200:10000-10200/udp"
networks:
- back-tier
Run Code Online (Sandbox Code Playgroud)
但是我无法在 kubernetes 中找到任何替代方案。如何使用 kubernetes 公开端口范围。
2:如何从我的 nodejs 应用程序连接到网关的特定实例。所以假设网关的两个实例正在运行,现在当用户连接到应用程序时,我将它连接到正在运行的两个实例之一并将其保存在 redis 中,并确保来自该用户的任何请求都传递到该特定实例. 如何从节点连接到特定副本?还获取副本列表?
我已经在 kuebernetes 上检查过这个问题,但它仍然没有解决。有什么解决方法吗?
我正在研究在 swarm (1.12.x) 下运行的保险库的概念。
单个容器将启动:
docker run -d --cap-add IPC_LOCK -p 8200:8200 -p 8215:8125 --name vault --volume /vagrant/vault:/vagrant/vault vault server -config=/path/to/vault.hcl
但是当我想在 swarm 作为服务运行它时,似乎无法指定IPC_LOCK功能,以便在这种情况下锁定 Vault 服务的加密交换。
使用docker service create命令启动群模式服务时如何设置 --cap-add 标志?
我在思考这意味着如何认真地完成数周,但尚未得出结论。也许我想错了方向。
假设您有一百个网络应用程序来来去去。你想要一个像 gitlab 这样的 nginx 配置:
location / {
proxy_pass http://gitlab;
}
Run Code Online (Sandbox Code Playgroud)
由于 gitlab 是用 来创建的docker service create,nginx 将能够通过它在你的入口网络中的 swarm-vip 假 dns 名称来解析 gitlab。
但是:仅当服务容器正在运行时。否则,nginx 将无法启动,因为 [emerg] 1#1: host not found in upstream "gitlab"
现在,当您必须运行高可用性 nginx 并且确保 proxy_pass 的应用程序正在运行不是您的业务时,这将是一个难题。
每次更新 nginx 服务时,如果其他一百个 swarm 服务中只有一个在同一秒内没有运行,它就不会出现……wtf?
如果这不起作用,为什么我们需要在 swarm 中进行名称解析?你怎么解决这个问题?
我考虑过 consul 和 nginx 虚拟主机模板的动态生成(甚至不要考虑 docker-nginx-proxy!),但是应用程序非常不同,您可以说每个应用程序都有自己的单独配置。而这一切工作不是为了特殊原因,只是为了解决nginx的解决问题?
docker-swarm ×10
docker ×9
networking ×2
database ×1
healthcheck ×1
kubernetes ×1
nginx ×1
postgresql ×1
security ×1
webrtc ×1
zombie ×1