更新如下!
我对 Ubuntu 20.04 上的 Docker swarm 感到困惑。我在 Scaleway 上创建了一台干净的 Ubuntu 机器,基本上遵循 https://dockerswarm.rocks/ 中的教程。 。我很快也找到了这个教程,它更短更清晰:https://blog.creekorful.com/2019/10/how-to-install-traefik-2-docker-swarm/ .
基本上(全部通过 SSH 连接到机器):
- 已安装 Docker
- 使用
# docker swarm init --advertise-addr=x.x.x.x
初始化 Swarm,其中我使用了服务器的远程 IP 地址。 - 然后我创建了一个覆盖网络
# docker network create --driver=overlay my-net
- 我启动了一个简单的 hello world 容器:
version: '3'
services:
helloworld:
image: tutum/hello-world:latest
ports:
- 80:80
networks:
- my-net
networks:
my-net:
external: true
# docker stack deploy -c helloworld.yml helloworld
- 从这一点来看,我认为我应该能够
#curl 127.0.0.1
并获得我的hello world。但是,我收到连接被拒绝:curl: (7) 无法连接到 127.0.0.1 端口 80:连接被拒绝
我尝试/检查的事情
docker 服务 ls 的输出
root@www2:~# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
md1bd2ydswo8 helloworld_helloworld replicated 1/1 tutum/hello-world:latest *:80->80/tcp
docker ps 的输出
root@www2:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c2d9d7379c5 tutum/hello-world:latest "/bin/sh -c 'php-fpm…" About a minute ago Up About a minute 80/tcp helloworld_helloworld.1.7u99ox2ea6bylb5by8vdca0pt
在 ubuntu 上启用 UFW
UFW 默认是禁用的,但我也尝试启用它。这是# ufw status
root@www2:~# ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
2376/tcp ALLOW Anywhere
2377/tcp ALLOW Anywhere
7946/tcp ALLOW Anywhere
7946/udp ALLOW Anywhere
4789/udp ALLOW Anywhere
80/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
2376/tcp (v6) ALLOW Anywhere (v6)
2377/tcp (v6) ALLOW Anywhere (v6)
7946/tcp (v6) ALLOW Anywhere (v6)
7946/udp (v6) ALLOW Anywhere (v6)
4789/udp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
修改 IP 地址
我还尝试了curl到公共(public)IP和私有(private)IP,以及使用私有(private)IP作为advertise-addr。我还尝试通过 IP 和域名从我的笔记本电脑 curl 到远程服务器。但一切都无济于事...
尝试 Arch Linux
我在我的笔记本电脑上运行 Arch Linux,并尝试在我的笔记本电脑上本地执行相同的操作,没有任何问题。
非常欢迎任何想法,谢谢!
更新
因此,由于我几乎失去了它,我决定启动另一个 VPS,这次清理 Ubuntu 18.04(而不是 20.04),它立即工作,没有任何问题........
最佳答案
这几天我一直在为这个问题绞尽脑汁。在 IBM Cloud 上的新 Ubuntu 20.04 镜像上,无法公开来自 Docker Swarm 服务的端口。
我最终在 sudo Journalctl -u docker.service
的日志中找到了这条消息
level=error msg="Could not get ipvs family information from the kernel. It is possible that ipvs is not enabled in your kernel. Native loadbalancing will not work until this is fixed."
通过使用 sudo apt-get install ipvsadm
安装 ipvsadm
,然后运行 sudo ipvasdm
(返回类似消息)来确认这一点。
我切换回 18.04,而不是尝试重建内核,但毫无疑问,如果您愿意的话,这是可能的。
关于docker - Ubuntu 20.04 上的 Docker Swarm 连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62374440/