docker swarm-无法连接到服务

时间:2019-10-27 15:45:46

标签: azure docker nginx docker-swarm

我想学习docker swarm,但是我无法让它在debian 10.1的全新Azure实例上工作(编辑:我也尝试过debian 9.11)

我仅将问题隔离到以下命令,这应该使我在端口9000上得到一个简单的nginx欢迎页面:

docker swarm init
docker service create --name nginx -p 9000:80 nginx
curl -vvv localhost:9000

但是实际上curl挂起了,服务没有响应:

* Expire in 1 ms for 1 (transfer 0x5574dbd88f50)
* Expire in 1 ms for 1 (transfer 0x5574dbd88f50)
* Expire in 1 ms for 1 (transfer 0x5574dbd88f50)
*   Trying ::1...
* TCP_NODELAY set
* Expire in 149998 ms for 3 (transfer 0x5574dbd88f50)
* Expire in 200 ms for 4 (transfer 0x5574dbd88f50)
* Connected to localhost (::1) port 9000 (#0)
> GET / HTTP/1.1
> Host: localhost:9000
> User-Agent: curl/7.64.0
> Accept: */*
>

在计算机上使用docker run运行nginx即可。

使用docker在Windows计算机上运行上述命令也可以。

但是,一旦我使用docker stack deploydocker service create,我就无法连接到裸露的端口。

这与debian有关吗?我的设定?我错过了一些配置吗?我该怎么做才能调查这个问题?

Docker版本为19.03.4

3 个答案:

答案 0 :(得分:1)

可能是curl正在使用IPv6而未为其配置Nginx。试试:

curl -vvv 127.0.0.1:9000

答案 1 :(得分:0)

使用命令docker service ls列出服务。在这里,您会找到一列包含您的服务状态的列。如果已列出,请继续了解是否有任何错误。使用命令docker service ps nginx并检查列Current state。如果一切正常,请使用命令docker service logs -f nginx检查nginx日志。向我们展示,我们将继续提供帮助。

答案 2 :(得分:0)

我在docker swarm的curl挂上遇到了类似的问题。最初,我认为这是compute usage的问题,但是我也可以使用一个简单的traefik容器来重现它。因此,可能与curl选择ipv6有关。这是一些可行的选择

  1. 添加httpd选项以卷曲以强制-4。这有所帮助,但是断断续续的。
  2. ipv4net.ipv6.conf.all.disable_ipv6 = 1添加到net.ipv6.conf.default.disable_ipv6 = 1文件,并通过sudo vi /etc/sysctl.conf重新加载。再次断断续续。
  3. 创建覆盖网络sudo sysctl -p,并在docker network create -d overlay dcm-net文件中将该网络标记为外部,如下所示:
docker-compose.yml

选项3目前效果最好。