docker stack deploy with docker-compose and publish a port number

docker stack deploy with docker-compose and publish a port number

我只想拥有一个 Nginx 容器运行并在端口 80 上发布

更新:我可以看到这在以前的版本中也发生过: https://github.com/moby/moby/issues/32111

我是运行:

docker version
Client:
 Version:      17.11.0-ce
 API version:  1.34
 Go version:   go1.8.3
 Git commit:   1caf76c
 Built:        Mon Nov 20 18:37:39 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.11.0-ce
 API version:  1.34 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   1caf76c
 Built:        Mon Nov 20 18:36:09 2017
 OS/Arch:      linux/amd64
 Experimental: false

我在 digitalocean 上 运行 这个,我可以在 sudo lsof -iTCP -sTCP:LISTEN -P:

时看到这个
sshd    1522 root    3u  IPv4  15971      0t0  TCP *:22 (LISTEN)
sshd    1522 root    4u  IPv6  15973      0t0  TCP *:22 (LISTEN)
dockerd 5025 root    6u  IPv6  28455      0t0  TCP *:2376 (LISTEN)
dockerd 5025 root   23u  IPv6 227368      0t0  TCP *:2377 (LISTEN)
dockerd 5025 root   29u  IPv6 227378      0t0  TCP *:7946 (LISTEN)

docker-compose.yml

version: "3"

services:
  website:
    image: my/nginx
    ports:
      - "80:80"
    expose:
      - "80"

然后是如何启动服务 - 试过这个:

docker stack deploy --compose-file docker-compose.yml stackdemo

但是如何发布端口?

我可以看到我可以从终端执行此操作?

docker service create --name my_web \
                        --replicas 3 \
                        --publish target=8080,port=80 \
                        nginx

但是我不知道如何从docker-compose,你知道吗?

经过我们在评论中的讨论;很可能是您的容器出现故障并重新启动 - 而不是您的端口未公开。

您的初始撰写文件是完美的 - 除了 expose 参数实际上是不必要的;但是 Docker 将忽略它们,您的服务将上线。

所以这里发生的是您的服务已成功创建,现在 DockerSwarm 将密切关注您的容器 - 如果它们失败,它将使它们重新联机。因此,检查您是否使用 docker service ls 检查 运行ning 服务,您将在网上看到您的服务。

现在是棘手的部分;是找出你的容器失败的原因。当您检查时,容器可能会重新启动,因此使用 docker ps -a 显示所有容器,包括已停止的容器。

检查最新的,并使用 "Container ID" 和 运行 docker logs container_id 找出容器失败的原因 - 解决这个问题,重建您的映像,并更新您的服务使用它 - 你应该可以开始了!