windows下使用docker运行docker-compose.yml文件

文章目录

    • 前言:
    • [一、运行 docker-compose.yml 文件](#一、运行 docker-compose.yml 文件)
    • [二、docker compose down 和 docker compose up -d命令](#二、docker compose down 和 docker compose up -d命令)
      • [2.1 docker compose down](#2.1 docker compose down)
      • [2.2 docker compose up -d](#2.2 docker compose up -d)
    • 三、运行结果
    • 四、可能报错的问题

前言:

本人使用的 docker-compose.yml 文件,内容如下:

bash 复制代码
services:
  # MySQL 服务配置
  mysql:
    image: mysql:8.4.0
    container_name: mysql
    restart: always
    environment:
      # 设置MySQL根用户密码
      MYSQL_ROOT_PASSWORD: 123456
      # 创建一个默认数据库
      MYSQL_DATABASE: sk_knowledge
    ports:
      # 将容器的3306端口映射到主机的3306端口
      - "3306:3306"
    volumes:
      # 持久化MySQL数据
      - mysql-data:/var/lib/mysql
    networks:
      - app-network
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
      interval: 10s
      timeout: 5s
      retries: 5

  # Redis 服务配置
  redis:
    image: redis:7.0.11
    container_name: redis
    restart: always
    command: redis-server --requirepass 123456 --appendonly yes
    ports:
      # 将容器的6379端口映射到主机的6379端口
      - "6379:6379"
    volumes:
      # 持久化Redis数据
      - redis-data:/data
    networks:
      - app-network
    healthcheck:
      test: ["CMD", "redis-cli", "-a", "123456", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5
      
  # Weaviate 服务配置
  weaviate:
    command:
      - --host
      - 0.0.0.0
      - --port
      - '8080'
      - --scheme
      - http
    image: semitechnologies/weaviate:1.33.2
    container_name: weaviate
    ports:
      - 8080:8080
      - 50051:50051
    volumes:
      - weaviate-data:/var/lib/weaviate
    restart: always
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'none'
      ENABLE_MODULES: ''
      CLUSTER_HOSTNAME: 'node1'
    networks:
      - app-network
  
  #minio
  minio:
    image: quay.io/minio/minio:RELEASE.2025-06-13T11-33-47Z
    container_name: minio
    restart: always
    environment:
      MINIO_ROOT_USER: admin
      MINIO_ROOT_PASSWORD: admin123456
    ports:
      - "9000:9000"   # MinIO API 端口(用于程序访问)
      - "9001:9001"   # MinIO 控制台端口(用于网页管理)
    volumes:
      # 持久化存储 MinIO 数据(宿主机目录可自定义)
      - minio-data:/data
    command: server /data --console-address ":9001"  # 指定数据目录和控制台端口
    healthcheck:
      # 健康检查配置
      test: [ "CMD", "curl", "-f", "http://localhost:9000/minio/health/live" ]
      interval: 30s
      timeout: 10s
      retries: 3
    networks:
      - app-network
  
  #mongodb
  mongodb:
    image: mongo:8.0.0
    container_name: mongodb
    restart: always
    ports:
      - "27017:27017"  # 映射MongoDB默认端口(主机:容器)
    volumes:
      # 持久化存储MongoDB数据
      - mongodb-data:/data/db
    command:
      # 启动命令(如需自定义配置,可添加--config /etc/mongo/mongo.conf)
      - --bind_ip_all  # 允许所有IP访问(生产环境建议限制特定IP)
    healthcheck:
      # 健康检查:通过mongodb-shell验证服务可用性
      test: echo 'db.runCommand("ping").ok' | mongosh mongodb:27017/test --quiet
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - app-network  # 自定义网络隔离

  # Temporal 服务(使用 MySQL 作为存储)
  temporal:
    image: temporalio/auto-setup:1.29.0
    container_name: temporal-service
    restart: always
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      - DB=mysql8                     # 指定数据库
      - DB_PORT=3306
      - MYSQL_USER=root     # 对应 MySQL 的用户
      - MYSQL_PWD=123456
      - MYSQL_SEEDS=mysql            # 连接到 MySQL 容器
#      - DYNAMIC_CONFIG_FILE_PATH=config/dynamicconfig/development.yaml
      # Temporal 数据库名称(需与初始化脚本一致)
      - DATABASE_NAME=temporal
      - VISIBILITY_DATABASE_NAME=temporal_visibility
    ports:
      - "7233:7233"  # Temporal gRPC 端口
    networks:
      - app-network

  # Temporal Web UI
  temporal-ui:
    image: temporalio/ui:2.39.0
    container_name: temporal-ui
    restart: always
    depends_on:
      - temporal
    environment:
      - TEMPORAL_ADDRESS=temporal:7233  # 连接 Temporal 服务
      - TEMPORAL_UI_PORT=8080
    ports:
      - "8081:8080"  # UI 访问端口
    networks:
      - app-network
# 定义网络
networks:
  app-network:
    driver: bridge

# 定义数据卷,用于持久化数据
volumes:
  mysql-data:
  redis-data:
  weaviate-data:
  mongodb-data:
  minio-data:

一、运行 docker-compose.yml 文件

在上一篇文章中提到如何安装并使用 docker,现在如何运行 docker-compose.yml 文件

1、确保 Docker Desktop 已经启动(右下角有小鲸鱼 🐳)

2、进入 docker-compose.yml 所在文件夹

3、直接 cmd 运行:

bash 复制代码
docker compose up

👉 注意(重点):

  • 新版本是 docker compose(没有中横线)
  • 老版本才是 docker-compose

4、如果不想一直占着窗口:docker compose up -d

5、结果如下:

问题: 其余下载成功了,但是有一个 mysql 端口被占了,镜像没有拉下来,因为本机也在使用 mysql,导致 3306 端口被占,Docker 抢不到。

解决: 改下 Docker 端口即可:

bash 复制代码
- "3306:3306" 改成 - "3307:3306"

含义:Windows 用 3307、容器内部还是 3306

其余端口占用也是同样的道理

改完后,输入:

bash 复制代码
docker compose down
docker compose up -d

二、docker compose down 和 docker compose up -d命令

2.1 docker compose down

停止并删除当前 compose 创建的所有东西

👉 举个简单理解:

相当于:把这一整套服务关掉并清空"运行状态"

2.2 docker compose up -d

启动(或重新创建)所有服务。

它会做:

  1. 如果本地没有镜像 → 自动拉取
  2. 创建容器
  3. 启动服务
  4. 按 docker-compose.yml 配置运行

一起用这两个命令:重启整个系统(干净重建)

三、运行结果

1️⃣ MySQL(数据库)

  • 地址:localhost
  • 端口:3306
  • 用户名:root
  • 密码:123456
  • 数据库:sk_knowledge

👉 用工具连接,比如:

  • Navicat
  • DBeaver

2️⃣ Redis

  • 地址:localhost
  • 端口:6379
  • 密码:123456

3️⃣ Weaviate(向量数据库)

4️⃣ MinIO(对象存储,很重要)

👉 这个你可以直接打开网页:

👉 API端口:http://localhost:9000

5️⃣ MongoDB

  • 地址:localhost
  • 端口:27017

6️⃣ Temporal(工作流引擎)

  • gRPC地址: localhost:7233

7️⃣ Temporal UI(可视化界面)

👉 浏览器打开:http://localhost:8081

四、可能报错的问题

1️⃣ 端口访问不了

  • 检查 ports 有没有写
  • 检查容器是否启动成功

2️⃣ 报错 "docker compose not found"

说明版本问题,可以试:docker-compose up

3️⃣ 文件名错误

必须叫:docker-compose.yml

相关推荐
AI服务老曹2 小时前
异构计算与边缘协同:基于 Docker 的企业级 AI 视频中台硬件适配架构
人工智能·docker·音视频
AmyLin_20012 小时前
【pdf2md-2:关键核心】PDF 转 Markdown 技术拆解:两阶段流水线、四级标题检测与段落智能合并
windows·python·pdf·pip·pdf2md
cool32003 小时前
二进制基于kubeasz部署 K8s 1.34.x 高可用集群实战指南-第二章:HAProxy + Keepalived负载均衡高可用配置(2-4)
容器·k8s·负载均衡
DROm RAPS3 小时前
springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice
spring boot·后端·docker
AI流程架构师(预备)3 小时前
用 Docker 部署语音识别服务(funasr)
运维·docker·容器
STRUGGLE_xlf3 小时前
MAC电脑Docker Desktop部署n8n
macos·docker·eureka
cool32003 小时前
二进制基于kubeasz部署 K8s 1.34.x 高可用集群实战指南-第三章:Harbor 私有镜像仓库部署(3-4)
云原生·容器·kubernetes
Lxinccode3 小时前
wsl(1) : docker里面的容器访问wsl的服务
运维·docker·容器·wsl容器访问宿主机
云川之下3 小时前
【k8s】rbac权限框架和鉴权、鉴权概念
云原生·容器·kubernetes