首页 > 解决方案 > Docker Swarm 服务简单示例不回复 curl

问题描述

我正在尝试使用本手册页中的路由网格部署一个简单的 docker swarm 服务并访问它。

使用单个管理器节点初始化 docker swarm 集群:

PS> docker swarm init --advertise-addr 192.168.1.156

Swarm initialized: current node (jpajl1nkr3xr1f3c3jqi56qia) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-2n1s6wap5dp1pjzzzqroyg22pqkwpnfijilmbdfgwjbkcqwder-5kqt701dv329fduhoaqld9m3y 192.168.1.156:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

部署服务:

PS> docker service create --name my_web --publish published=80,target=80 --replicas 3 nginx

fqy4vi3hjncougtak9qj9fuz0
overall progress: 3 out of 3 tasks
1/3: running   [==================================================>]
2/3: running   [==================================================>]
3/3: running   [==================================================>]
verify: Service converged

检查服务和容器:

PS> docker service ls

ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
fqy4vi3hjnco        my_web              replicated          3/3                 nginx:latest        *:80->80/tcp

PS> docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
d24a85b4d6ba        nginx:latest        "/docker-entrypoint.…"   4 minutes ago       Up 4 minutes        80/tcp              my_web.2.b44g8bjs95ac8v0g90hnv2cjd
b6466f252b46        nginx:latest        "/docker-entrypoint.…"   4 minutes ago       Up 4 minutes        80/tcp              my_web.3.hpc4zxlr178tklf84t1y5rc64
35e194264098        nginx:latest        "/docker-entrypoint.…"   4 minutes ago       Up 4 minutes        80/tcp              my_web.1.u1euqrfwq2te75zsbkmfkv0bq

要求:

PS> curl http://localhost
curl : Se ha terminado la conexión: La conexión ha terminado de forma inesperada.
<< (Free Translation) curl: Connection is terminated: The connection has finished unexpectedly.  >>

En línea: 1 Carácter: 1
+ curl http://localhost
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

这些替代方案的结果相同:

PS> curl http://localhost:80
PS> curl http://127.0.0.1:80
PS> curl http://192.168.1.156
PS> curl http://192.168.1.156:80

检查 Windows 中的监听端口:

CMD> netstat -a -b | find "80"

  TCP    0.0.0.0:80             fs1322:0               LISTENING
  TCP    0.0.0.0:7680           fs1322:0               LISTENING
  TCP    0.0.0.0:8080           fs1322:0               LISTENING
  TCP    169.254.80.254:139     fs1322:0               LISTENING
  TCP    172.19.80.1:53         fs1322:0               LISTENING
  TCP    172.19.80.1:139        fs1322:0               LISTENING

检查一个容器中的监听端口

# netstat -ltpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.11:34835        0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1/nginx: master pro
tcp6       0      0 :::80                   :::*                    LISTEN      1/nginx: master pro

curl localhost在一个容器中执行成功:

# curl localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
</head>
</html>

环境:

标签: dockerdocker-swarmwsl-2

解决方案


推荐阅读