docker swarm踩坑记

2024-11-22 15:40

先说下我的需求,想用docker swarm做个简单的双机热备功能,比如mysql,redis, emqx,minio。这样的例子网上基本没有,自己踩坑过来,最后没成功,但是应该很有希望了,先做下记录。

部署环境

操作系统 win11 home一台win11 pro一台

docker:docker desktop 4.36.0

1. 第一步创建swarm就失败,命令大概是这样的

docker swarm init --advertise-addr  我的本机ip

我记得报错信息大概如下,因为没想整理,所以这些出错信息是我网页历史记录中翻出来的。

must specify a listening address because the address to advertise is not recognized as a system address, and a system's IP address to use could not be uniquely identified

最后发现有个文章说desktop比如设置成windows模式并且设置成 "experimental": true才行。用吴孟达的话说,不是一个完整的男人。

然后发现我用的win11home电脑没法把docker desktop切换成windows模式。

又一顿查,发现win11 pro可以。试了一下确实可以,但是windows模式的docker desktop最高版本只有4.35.1了。真不知说啥好了,没有明确的文档告诉我们desktop wsl2的模式是不支持swarm的,并且报错信息还答非所问,浪费了一天时间。

2. docker swarm 添加节点。在swarm管理节点上执行如下命令就可以看到加入的命令,命令行中的token是随机生成的。

docker swarm join-token manager
docker swarm join-token worker

上面两个命令分别获取作为manager节点加入和worker节点加入的命令行

这个地方也无语,最后发现win11home作为manager节点加入就是报错,但是作为worker可以,好吧,先有的用吧。谁让不是个完整的男人呢

3. 创建docker stack的配置文件

version: '3'

services:
  emqx1:
    image: emqx:5.8.2
    container_name: emqx1
    environment:
      - "EMQX_NODE_NAME=emqx@node1.emqx"
      - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
      - "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx,emqx@node2.emqx]"
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx", "ctl", "status"]
      interval: 5s
      timeout: 25s
      retries: 5
    networks:
      emqx-bridge:
        aliases:
          - node1.emqx
    ports:
      - 1883:1883
      - 8083:8083
      - 8084:8084
      - 8883:8883
      - 18083:18083
    # volumes:
    #   - $PWD/emqx1_data:/opt/emqx/data
    deploy:
      placement:
        constraints:
          - node.hostname==l2-master-01

  emqx2:
    image: emqx:5.8.2
    container_name: emqx2
    environment:
      - "EMQX_NODE_NAME=emqx@node2.emqx"
      - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
      - "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx,emqx@node2.emqx]"
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx", "ctl", "status"]
      interval: 5s
      timeout: 25s
      retries: 5
    networks:
      emqx-bridge:
        aliases:
          - node2.emqx
    # volumes:
    #   - $PWD/emqx2_data:/opt/emqx/data
    deploy:
      placement:
        constraints:
          - node.hostname==l2-master-02
networks:
  emqx-bridge:
    driver: overlay

这里要注意的地方一个是networks,这块在windows desktop下应该是overlay,在linux下才是bridge。可以通过docker network ls命令查看,要与你电脑的network一致

还有就是 deploy,我这里是想让一个节点部署一个容器

还有必须是version 3

节点的hostname可以通过docker node ls查看

执行了之后发现win11pro电脑就是不成功,然后win11home还不停的生成新的容器。查了一下win11pro不成功的可能是因为pull不下来镜像。然后加了代理  "registry-mirrors": [
    "https://docker.1panel.live"
  ]也不起作用,使用docker pull 就是失败。但是win11home可以。这就很恶心。然后我把win11home的镜像导出 docker save -o emqx.tar emqx,拷贝到win11pro电脑上导入 docker load -i emqx.tar 结果失败,提示的意思大概是linux的导出无法导入到windows。现在就是这样的绝境了,明天我再加一台win11home试试,说不定就成功了

 

点击:loading..
收藏到:中国收客网
评论

  • 千秋万世风
    windows模式的docker desktop最高版本只有4.35.1是我弄错了,都可以升级到最新版本。系统提示我当前是最新我就以为不能升级了
    2024/11/23 9:09:16