我想学习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 deploy
或docker service create
,我就无法连接到裸露的端口。
这与debian有关吗?我的设定?我错过了一些配置吗?我该怎么做才能调查这个问题?
Docker版本为19.03.4
答案 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有关。这是一些可行的选择
httpd
选项以卷曲以强制-4
。这有所帮助,但是断断续续的。ipv4
和net.ipv6.conf.all.disable_ipv6 = 1
添加到net.ipv6.conf.default.disable_ipv6 = 1
文件,并通过sudo vi /etc/sysctl.conf
重新加载。再次断断续续。sudo sysctl -p
,并在docker network create -d overlay dcm-net
文件中将该网络标记为外部,如下所示:docker-compose.yml
选项3目前效果最好。