【发布时间】:2021-05-31 19:47:22
【问题描述】:
我正在尝试让一个非常简单的 docker-swarm 运行。如果我使用docker-compose up -d 启动容器,我可以转到 locahost 并查看“Hello 消息”。
运行 docker stack deploy -c docker-compose.yml swar 可以很好地启动 swarm。
码头工人ps
docker 服务 ls
但是导航到 localhost、0.0.0.0、127.0.0.1 或机器 IP 不起作用,它只是超时并显示“无法访问此站点。反应时间太长了。 我还尝试了另一个来自 github 的小教程,它也有同样的问题。 有什么想法有什么问题吗?
server.js:
const express = require("express");
const os = require("os");
const app = express();
app.get("/", (req, res) => {
res.send("Hello from Swarm " + os.hostname());
});
app.listen(3000, () => {
console.log("Server is running on port 3000");
});
docker-compose.yml:
version: "3"
services:
web:
build: .
image: takacsmark/swarm-example:1.0
ports:
- 80:3000
networks:
- mynet
networks:
mynet:
Dockerfile:
FROM node:11.1.0-alpine
WORKDIR /home/node
COPY . .
RUN npm install
CMD npm start
编辑: 运行 wget 只是挂起。
--2021-05-28 16:59:52-- http://<ip>/
Connecting to <ip>:80...
curl
我已经初始化了包含广告 ip 的群
docker swarm init --advertise-addr <my address>
仍然没有运气。
我的docker版本是20.10.5,docker-compose版本:1.25.0
【问题讨论】:
-
值得注意的是,
docker stack deploy不支持 build: 指令,因此除非最近在本地构建了映像,否则它将尝试从 docker hub 部署具有该名称的映像。你可以去docker-compose build,它将使用 build: 属性构建每个服务,并使用任何 image: 属性自动标记它。这将适用于单个节点。否则,您将需要一个注册表来托管所有节点都可以访问的自定义图像。 -
我应该提到的是,我确实使用 compose 构建了图像,这也是教程步骤的一部分。
标签: node.js docker docker-swarm