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
找出容器失败的原因 - 解决这个问题,重建您的映像,并更新您的服务使用它 - 你应该可以开始了!
我只想拥有一个 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
找出容器失败的原因 - 解决这个问题,重建您的映像,并更新您的服务使用它 - 你应该可以开始了!