标签: docker-swarm

如何从外部访问Weave DNS-Server?

我在Docker-Swarm上使用Weave网络插件.

我创建了一个具有特定IP范围的docker网络,与我从内部网络路由的默认Weave网络不同.

为了使容器更易于访问,我使用weave附加DNS名称,如containername.auto.mycompany.de.现在我想访问我公司的网络.问题是,编织只允许从本地主机访问编织DNS.

就像在我的一个swarm节点上一样,我可以这样做:

host foobar.auto.mycompany.de 172.17.0.1
Using domain server:
Name: 172.17.0.1
Address: 172.17.0.1#53
Aliases: 

foobar.auto.mycompany.de has address 10.40.13.3
Host foobar.auto.mycompany.de not found: 3(NXDOMAIN)
Host foobar.auto.mycompany.de not found: 3(NXDOMAIN)
Run Code Online (Sandbox Code Playgroud)

但我找不到一种方法可以在这个(10.40.130/24)泊坞网络中的一个IP上访问编织容器,或者将端口暴露给群集节点.

我能想到但却不喜欢的唯一方法就是这样做:

iptables -t nat -A  DOCKER -p tcp --dport 53 -j DNAT --to-destination 172.17.0.1:53
Run Code Online (Sandbox Code Playgroud)

(这不起作用,这只是想法)

或者篡改编织脚本以使其在编织容器的开始处暴露端口.

有人知道更好的解决方案吗?

linux dns docker docker-swarm weave

12
推荐指数
1
解决办法
539
查看次数

如何使用Docker 1.12 swarm模式部署consul

我有一个由3台服务器组成的领事群.我还有一个大约6名工人和3名主人的码头工人(主人与领事服务器在同一硬件上,但设置有可用性==排水,以防止他们接受工作).

我通常使用consul-template来阅读领事K/V. 我不能为我的生活弄清楚如何合理地推出一个领事代理服务.如果我使用全局服务,那么每个节点都会获得一个代理,但服务器群集会抱怨,因为客户端代理似乎都具有相同的IP地址.

复制服务似乎是要走的路,但我相信我需要发布客户端端口8301,这似乎会导致我的服务器集群(运行swarm主服务器和consul服务器(不在docker下))发生冲突.

我很欣赏正确方向的一般指导 - 记住这是1.12群模式,因此与早期版本有很大不同.

docker docker-swarm

12
推荐指数
2
解决办法
7161
查看次数

Docker Swarm部署 - 等待服务/容器存在

我有一个工作群设置和滚动更新部署.由于我必须在部署后执行某些任务(如数据库迁移),因此我向堆栈添加了"管理器"服务.这项服务仅限于节点管理器 - 所以我总能找到它.

要获取当前的containerID,请使用以下命令:
export MANAGER_ID=$(docker --tls ps --filter label=com.docker.swarm.service.name=projectname-php-manager -q)

这有效......但不是在部署期间.

stack deploy很快就会退出(因为容器已经启动),甚至是经理容器的出口都会更新.我还添加了一个sleep 10befor geting containerID,但结果各不相同.

有没有办法等待或知道何时部署特定服务?

完整部署看起来像这样(在gitlab-ci作业中完成 - 但这不是问题的根源):

deploy:staging:
  variables:
    DOCKER_HOST: "tcp://swarm-manager.hostname.tld:2376"
    DOCKER_CERT_PATH: "/home/gitlab-runner/docker/swarm-manager.hostname.tld"
    VERSION_TAG: "$CI_COMMIT_TAG"
    MYSQL_PROD_PASSWORD: "$MYSQL_PROD_PASSWORD"
    SECRET_TOKEN: "$SECRET_TOKEN"
  script:
    - docker --tls stack deploy -c docker-compose.prod.yml project-name --with-registry-auth --prune
    - sleep 10
    - export MANAGER_ID=$(docker --tls ps --filter label=com.docker.swarm.service.name=project-name_php-manager -q)
    - docker --tls exec -t $MANAGER_ID bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration
  stage: deploy
  environment:
    name: staging
    url: http://projectname.com
  only: [tags]
  cache: ~
  dependencies: …
Run Code Online (Sandbox Code Playgroud)

continuous-deployment docker docker-swarm

12
推荐指数
1
解决办法
3264
查看次数

Docker Swarm 覆盖网络 ICMP 可以工作,但其他任何东西都不起作用

我有一个由 1 名经理、3 名工作人员组成的小型集群设置来试验一些事情。它正在运行集群编排,并且能够从任何堆栈 yaml 跨集群启动服务,并通过入口网络为 Web 应用程序提供服务。我没有对 docker-ce 的默认 yum 安装进行任何更改。普通安装,无需对任何节点进行配置更改。

然而,存在其他覆盖网络上的服务间通信问题。我使用 --attachable 标志创建一个 docker 覆盖网络测试网,并在 node-1 上将 nginx(名为:nginx1)容器附加到它,并在 manager-1 上将 netshoot(名为:netshoot1)容器附加到它。

然后我可以从 netshoot1 ping nginx1,反之亦然。我可以在两个节点上通过 tcpdump 观察这些数据包交换。

# tcpdump -vvnn -i any src 10.1.72.70 and dst 10.1.72.71 and port 4789
00:20:39.302561 IP (tos 0x0, ttl 64, id 49791, offset 0, flags [none], proto UDP (17), length 134)
    10.1.72.70.53237 > 10.1.72.71.4789: [udp sum ok] VXLAN, flags [I] (0x08), vni 4101
IP (tos 0x0, ttl 64, id 20598, …
Run Code Online (Sandbox Code Playgroud)

networking docker docker-swarm

12
推荐指数
1
解决办法
7366
查看次数

在不使用docker机器的情况下部署docker swarm

目前我有很多RHEL7 VMs运行,RackSpace并希望部署docker swarm用于测试目的.该Docker文件只介绍使用泊坞窗机部署泊坞窗群的方法.

问: 既然VirtualBox不能在虚拟机中使用,那么我可以在不使用docker机器的情况下直接在我的虚拟机上部署docker swarm吗?

rhel virtual-machine docker docker-swarm

11
推荐指数
1
解决办法
3115
查看次数

如何在"准备"状态下获取docker服务任务的日志

我现在正在玩docker 1.12,创建了一个服务,并注意到"preparing"我跑的时候有一个阶段"docker service tasks xxx".

我只能猜测在这个阶段,图像被拉或更新.

我的问题是:如何查看此阶段的日志?或者更一般地说:如何查看docker服务任务的日志?

docker docker-swarm

11
推荐指数
2
解决办法
6317
查看次数

Docker Swarm如何处理数据库(PostgreSQL)复制?

我正在学习Docker Swarm模式,我设法在本地创建一个带有Web应用程序和PostgreSQL数据库的Swarm.我可以扩展它们,我看到Swarm创建了副本.

我想我理解Docker Swarm 如何对常规Web服务器进行负载均衡,但它如何与数据库容器一起开箱即用?

在Swarm上下文之外,通常数据库有自己的方式来处理复制,以插件或MySQL集群等扩展产品的形式.像Cassandra这样的其他数据库已经直接在他们的产品中构建了复制.在Swarm上下文中,我们是否还需要依赖这些数据库插件和功能?

处理数据库容器副本之间数据一致性的预期模式是什么?

我知道这是一个非常开放的问题,但Docker的文档也是非常开放的,我似乎无法找到任何具体的内容.

database postgresql docker docker-swarm

11
推荐指数
1
解决办法
4952
查看次数

如何扩展NodeJS有状态应用程序

我目前正在开发基于网络的MMORPG游戏,并希望设置基于Docker和DigitalOcean水滴的自动缩放策略.

但是,我想知道如何才能做到这一点:

我的游戏服务器必须可以跨不同的Docker容器进行拆分但是每个游戏服务器实例应该就好像它只是一个巨大的游戏服务器.这意味着在一个(角色移动)中发生的每个修改也应该在每个其他游戏服务器中进行镜像.

我试图让它工作(至少在概念上),但无法找到一种方法来正确同步我的所有实例.我应该只使用主设备广播活动还是有替代方案?

我想知道我的MySQL数据库是一样的:因为每个游戏服务器都必须从/向数据库读取/写入,当游戏变得越来越大时,我将如何使其正确扩展?我能想到的最好的解决方案是将数据库保存在一台非常强大的服务器上.

据我所知,如果所有游戏服务器都不必"共享"他们的状态,这可能很容易,但这主要是因为我可以在活动突然激增的情况下快速扩展.

(将有不同的"全球"游戏服务器,如A,B,C ......但是这些全球游戏服务器中的每一个都应该在幕后由运行"真实"游戏服务器的1-X docker容器组成,以便"全球"游戏服务器只是一个概念)

scalability node.js docker docker-swarm

11
推荐指数
1
解决办法
998
查看次数

如何在不重新启动所有服务的情况下更新docker堆栈

我有一个群集群,其中部署了不同的技术码头工人.(Zookeeper,Kafka,Elastic,Storm和自定义Web应用程序)

Web应用程序发生了巨大的变化,每次web docker更改时都必须更新堆栈.偶尔会有Elasticsearch图像的更新.

当我运行docker stack deploy时,它会重新启动所有甚至没有更改的现有docker服务.这妨碍了整个堆栈,整个应用程序都有停机时间.Docker堆栈没有更新选项.

有人有解决方案吗?

docker docker-swarm docker-stack

11
推荐指数
1
解决办法
6427
查看次数

Docker容器可以在Windows IoT Core中运行

有没有办法在Windows IoT Core中运行Docker容器?我已经看到它可以在Azure,Windows Server和桌面W10中使用,但没有关于Windows IoT Core的证据,我不确定一些现有的docker-engine安装是否与IoT Core兼容,或者它不是可能.

raspberry-pi docker docker-swarm windows-10-iot-core windowsiot

11
推荐指数
2
解决办法
5055
查看次数