我正在尝试让一个非常简单的 docker-swarm 运行起来。如果我使用
docker-compose up -d
启动容器,我可以转到 locahost 并看到“Hello 消息”。
运行 docker stack deploy -c docker-compose.yml swar
可以正常启动集群。
码头工人 PS
docker服务ls
但是,导航到 localhost、0.0.0.0、127.0.0.1 或计算机 IP 不起作用,只是超时并显示“无法访问此站点”。花了太长时间才做出回应。 我也尝试过 github 上的另一个小教程,它也有同样的问题。 有什么想法是错的吗?
服务器.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 < my computer ip > 只是挂起。
--2021-05-28 16:59:52-- http://<ip>/
Connecting to <ip>:80...
curl < ip > 只是挂起没有输出。
我已经初始化了包含广告 IP 的群
docker swarm init --advertise-addr <my address>
但仍然没有运气。
我的docker版本是20.10.5,docker-compose版本:1.25.0
对于任何遇到此类问题的人。问题是docker的版本。我删除了 20.10.15 并重新安装了 docker 19.03.10。要安装自定义 docker 而不是最新的,请按照以下步骤操作。 https://docs.docker.com/engine/install/ubuntu/ locahost 不起作用,但运行
hostname -I
获取您机器的 IP 并将其粘贴进去。然后就可以了。
我的撰写文件中有 Ngnix 服务。
nginx:
image: nginx:latest
build:
context: .
dockerfile: ./nginx/Dockerfile
depends_on:
- gateway
ports:
- 80:80
- 443:443
当我使用
docker compose up --build
运行时,它就像使用构建一样工作。 docker stack up 使用该图像,但不起作用,因为它使用的是最新的 nginx:latest
而不是我使用 docker-compose build 构建的图像。
我花了很多时间才弄清楚这一点。
我重新命名了图像和服务也是为了避免混淆。