我只想让一个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,你知道吗?
答案 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
以找出容器失败的原因 - 解决问题,重建映像并更新服务以使用它 - 你应该好好去!