假设拓扑上有两个服务
两者都假设在端口80上运行.
在创建服务时,如果要在群集外部访问它,则需要在docker swarm上公开并将端口从服务映射到节点(外部端口).但是,如果您将端口80映射为让我们说API服务,那么您无法映射Web Interface服务的相同端口,因为它已经映射.
怎么解决这个问题?
据我所知,这个用例不受支持.即使你想拥有一个大群集群,并且因为这种行为也无法实现所有服务和应用程序.
我错过了什么?
任何模式来解决这个问题?
我们正在使用Docker Compose文件和Docker Swarm部署我们的服务.我想知道将健康检查放在Dockerfile中是否有任何区别,或者将它放在docker-compose.yml中是否更好.
我觉得我已经阅读了所有可用的文档,但找不到任何内容.
泊坞窗,compose.yml
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8081/ping"]
interval: 30s
timeout: 10s
Run Code Online (Sandbox Code Playgroud)
Dockerfile
HEALTHCHECK --interval=30s --timeout=10s CMD curl -f http://localhost:8081/ping
Run Code Online (Sandbox Code Playgroud) 我正在尝试运行一次性命令来初始化一个新的docker swarm中的数据库模式,该数据库模式部署了1.13对docker-compose文件的新支持.
该群有以下网络:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
...
b7dptlu8zyqa vme_internal overlay swarm
...
Run Code Online (Sandbox Code Playgroud)
在docker-compose.yml文件中定义为:
networks:
internal:
Run Code Online (Sandbox Code Playgroud)
我运行的命令是
docker run --rm --network vme_internal app:0.1 db upgrade
Run Code Online (Sandbox Code Playgroud)
使用额外vme_前缀来自我在部署时给堆栈的名称.现在当我运行上面的命令时,我得到:
docker: Error response from daemon: Could not attach to network vme_internal:
rpc error: code = 7 desc = network vme_internal not manually attachable.
Run Code Online (Sandbox Code Playgroud)
如何使网络可连接?
如何轻松打印所有可用的docker swarm节点及其标签?
添加标签到节点
$ docker node update --label-add type=one my_node_name
和默认列表节点docker node ls没有显示过滤器.
另外我可以列出标签检查每个节点,如:
$ docker inspect my_node_name | grep type
"type": "one"
Run Code Online (Sandbox Code Playgroud)
- -编辑 -
类似的问题如何按标签过滤docker swarm节点?是关于过滤我的是关于列表
我的问题类似于docker swarm init无法选择IP地址错误,但我发现接受的答案有些模糊,所以我再问一遍.在尝试
docker swarm init
Run Code Online (Sandbox Code Playgroud)
我正在发送错误消息
来自守护程序的错误响应:无法选择要广告的IP地址,因为此系统在不同的接口上有多个地址(enp1s0上为192.168.130.117,wlp2s上为192.168.130.89) - 使用--advertise-addr指定一个地址
这可能是什么原因?我目前正在运行VPN(OneClickVPN); 那是问题吗?
另外,为了指定一个地址--advertise-addr,我想了解更多有关消息中给出的地址的信息.我怎么能这样做?
我一直在玩,docker-compose并从码头中心网站拼凑了一个项目.
我想到的一件事就是我如何扩展个别服务(通过添加更多实例)并让现有实例以某种方式了解这些新实例.
例如,规范docker-compose示例包括以下群集:
我创建了集群,一切正常,但我尝试将另一个节点添加到集群:
$ docker-compose scale web=2
Creating and starting 2 ... done
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e83f6ed94546 packetops/web:latest "/bin/sh -c 'python /" 6 minutes ago Up About a minute 80/tcp swarm-slave/1_web_2
40e01a615a2f tutum/haproxy "python /haproxy/main" 7 minutes ago Up About a minute 443/tcp, 1936/tcp, 172.16.186.165:80->80/tcp swarm-slave/1_lb_1
f16357a28ac4 packetops/web:latest "/bin/sh -c 'python /" 7 minutes ago Up About a minute 80/tcp swarm-slave/1_lb_1/1_web_1,swarm-slave/1_lb_1/web,swarm-slave/1_lb_1/web_1,swarm-slave/1_web_1
8dd59686e7be redis "/entrypoint.sh …Run Code Online (Sandbox Code Playgroud) 我有一个包含一个管理器和另一个普通节点的swarm集群,当我创建一个swarm服务时,我正在创建mount类型,mount source和mount target.它在manger和node中创建具有相同名称的卷,并启动容器,我的服务已启动.
当我发布服务时,与服务一起创建的卷未被删除,这仍然很好.
我面临的问题是,当我删除具有相同端点的卷时,它只删除了swarm管理器中的卷,在创建服务时在节点中创建的卷仍然存在.
我希望管理器删除与swarm服务一起创建的所有卷.有办法吗?
我无法mongodb从docker swarm群集连接到外部服务器.
据我了解这是因为集群使用覆盖网络驱动程序.我对吗?
如果没有,docker overlay驱动程序如何工作以及如何mongodb从群集连接到外部服务器?
我正在使用docker swarm并希望部署一个服务docker-compose.我的服务使用一个自定义映像,称为myuser/myrepo:mytag我成功部署到Docker-Hub到私有存储库.
我的docker-compose看起来像这样:
version: "3.3"
services:
myservice:
image: myuser/myrepo:mytag
ports:
- "8080:8080"
Run Code Online (Sandbox Code Playgroud)
在执行之前,我成功地将图像拉出: docker pull myuser/myrepo:mytag
当我跑步时,docker stack deploy -c docker-compose.yml myapp我总是收到错误:"No such image: myuser/myrepo:mytag".
有趣的是,仅运行相同的文件:( docker-compose up即没有swarm模式)一切正常,服务启动.
我真的不明白为什么会失败?我已经尝试过清理docker system prunedocker然后重新生成我的图像,但没有成功.
我与团队成员一起开发微服务架构,但我的工作方式有问题。事实上,我有太多的微服务,当我在开发过程中运行它们时,即使有一个好的工作站,它也会消耗太多内存。所以我使用 docker compose 来构建和执行我的 MSA,但这需要很长时间。人们经常听说如何在技术上构建 MSA,但从未听说过如何有效地构建它。在这种情况下你怎么办?你如何工作的 ?您是否使用工具或任何其他工具来改进和促进您的开发。我听说过 skaffold,但我看不出与 docker compose 或集群环境中的简单 ci/cd 有什么区别。随时提供提示和您的意见。谢谢
development-environment microservices docker-compose docker-swarm skaffold
docker-swarm ×10
docker ×9
devops ×1
docker-stack ×1
dockerfile ×1
etcd ×1
ip ×1
label ×1
networking ×1
skaffold ×1