Docker swarm:无法从同一部署的容器内部访问公共服务

Docker swarm:无法从同一部署的容器内部访问公共服务,docker,docker-swarm-mode,Docker,Docker Swarm Mode,我的设置:我有一个单机docker swarm“集群”。 简单地说,我有一个由两个服务a和B组成的堆栈部署。这两个服务都连接(通过外部覆盖网络)到另一个运行traefik代理的堆栈,以向公众公开这些服务。 我可以通过这两种服务的traefik路由从我的浏览器访问它们。 但什么不起作用: 我无法使用A的公共域(通过其traefik路由)从服务B内到达服务A。尝试HTTP调用时,我总是会收到连接超时 这是一些常规的预期行为,可以通过某些选项修复,或者我的设置是否以某种方式被破坏?我读到,endpoi

我的设置:我有一个单机docker swarm“集群”。 简单地说,我有一个由两个服务a和B组成的堆栈部署。这两个服务都连接(通过外部覆盖网络)到另一个运行traefik代理的堆栈,以向公众公开这些服务。 我可以通过这两种服务的traefik路由从我的浏览器访问它们。

但什么不起作用: 我无法使用A的公共域(通过其traefik路由)从服务B内到达服务A。尝试HTTP调用时,我总是会收到连接超时

这是一些常规的预期行为,可以通过某些选项修复,或者我的设置是否以某种方式被破坏?我读到,
endpoint\u mode:dnsrr
在这种情况下可能会有所帮助,但对我来说真的没有什么不同。我在两种服务上都试过了,也在traefik服务上试过了

我不想在这里用我的机器和swarm部署的所有配置细节来压倒你,因为如果我只是犯了一个配置错误(从我的问题描述中可以明显看出),那么这可能是过火了

对于雄心勃勃的读者,以下是一些进一步的细节:

$ docker info
Client:
 Debug Mode: false

Server:
 Containers: 125
  Running: 59
  Paused: 0
  Stopped: 66
 Images: 328
 Server Version: 19.03.8
 Storage Driver: overlay2
  Backing Filesystem: <unknown>
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: loki
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: active
  NodeID: juwtdqk60ufj3rityctog7ev0
  Is Manager: true
  ClusterID: 3mte2zcw4nfc1jq17dzwvtoi3
  Managers: 1
  Nodes: 1
  Default Address Pool: 10.0.0.0/8
  SubnetSize: 24
  Data Path Port: 4789
  Orchestration:
   Task History Retention Limit: 5
  Raft:
   Snapshot Interval: 10000
   Number of Old Snapshots to Retain: 0
   Heartbeat Tick: 1
   Election Tick: 10
  Dispatcher:
   Heartbeat Period: 5 seconds
  CA Configuration:
   Expiry Duration: 3 months
   Force Rotate: 0
  Autolock Managers: false
  Root Rotation In Progress: false
  Node Address: 178.254.21.80
  Manager Addresses:
   178.254.21.80:2377
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 4.15.0-96-generic
 Operating System: Ubuntu 18.04.4 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 8
 Total Memory: 31.41GiB
 Name: rv1324
 ID: L7JD:POVR:EPMY:JGMF:3BFX:DQJA:B5KK:O3PG:YH44:TNLJ:YD3I:GROZ
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false
$docker info
客户:
调试模式:false
服务器:
货柜:125
跑步:59
暂停:0
截止日期:66
图片:328
服务器版本:19.03.8
存储驱动程序:overlay2
备份文件系统:
支持d_类型:true
本机覆盖差异:真
日志驱动程序:loki
Cgroup驱动程序:cgroupfs
插件:
卷:本地
网络:网桥主机ipvlan MAVLAN空覆盖
日志:awslogs fluentd gcplogs gelf journald json文件本地日志条目splunk syslog
群集:活动
NodeID:juwtdqk60ufj3rityctog7ev0
经理:是吗
集群:3mte2zcw4nfc1jq17dzwvtoi3
经理:1
节点:1
默认地址池:10.0.0.0/8
子网规模:24
数据路径端口:4789
编排:
任务历史记录保留限制:5
木筏:
快照间隔:10000
要保留的旧快照数:0
心跳滴答:1
选举时间:10
调度员:
心跳周期:5秒
CA配置:
有效期:3个月
强制旋转:0
自动锁定管理器:错误
正在进行根旋转:false
节点地址:178.254.21.80
经理地址:
178.254.21.80:2377
运行时:runc
默认运行时:runc
初始化二进制文件:docker Init
集装箱版本:7ad184331fa3e55e52b890ea95e65ba581ae3429
runc版本:DC9208A3303FEEF5B3839F432D9BEB36DF0A9DD
初始版本:fec3683
安全选项:
应用程序访问控制系统
赛康普
配置文件:默认值
内核版本:4.15.0-96-generic
操作系统:Ubuntu 18.04.4 LTS
OSType:linux
架构:x86_64
中央处理器:8
总内存:31.41GiB
姓名:rv1324
ID:L7JD:POVR:EPMY:JGMF:3BFX:DQJA:B5KK:O3PG:YH44:TNLJ:YD3I:GROZ
Docker根目录:/var/lib/Docker
调试模式:false
注册处:https://index.docker.io/v1/
标签:
实验性:错误
不安全的登记处:
127.0.0.0/8
已启用实时还原:false
我尝试部署的swarm堆栈可以在这里找到
连接问题出现在
CMP授权
CPM前端
服务之间。为了完成OAuth2授权过程,后一个服务需要向授权服务的公共域发送POST请求。

同时我发现这是一个防火墙问题。我正在机器上运行ufw,但我还没有找到如何为docker swarm正确配置它。仅仅打开swarm管理端口并没有帮助,同时我发现这是一个防火墙问题。我正在机器上运行ufw,但我还没有找到如何为docker swarm正确配置它。仅仅打开swarm管理端口并没有帮助