docker stack部署与docker-compose并发布端口号

时间:2017-12-11 20:50:45

标签: docker-swarm

我只想让一个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)

搬运工-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,你知道吗?

1 个答案:

答案 0 :(得分:1)

我们在评论中讨论后;你的容器很可能失败并重新启动 - 而不是你的端口没有暴露。

你的初始撰写文件是完美的 - 除了let imageMedium = ''; if (response.data.image != null) { imageMedium = response.data.image.meduim } 参数实际上是不必要的;但Docker无论如何都会忽略它们,你的服务就会上线。

所以这里发生的事情是您的服务已成功创建,现在Docker Swarm将密切关注您的容器 - 如果它们失败,它将使它们重新联机。因此,检查您是否使用expose检查运行服务,您将在线看到您的服务。

现在这里很棘手;是弄清楚你的容器失败的原因。检查时容器可能会重新启动,因此请使用docker service ls显示所有容器,包括已停止的容器。

检查最新版本,然后选择“容器ID”并运行docker ps -a以找出容器失败的原因 - 解决问题,重建映像并更新服务以使用它 - 你应该好好去!

相关问题