Windows怎么用Docker Compose编排服务_Windows如何用docker-compose同时管理多个容器【实战】-1

如果您在 Windows 系统上已安装 Docker Desktop,并希望统一启动、停止和管理多个相互依赖的容器(如 Web 应用、数据库、缓存服务),则需借助 docker-compose.yml 文件定义服务拓扑。以下是实现该目标的具体操作路径:

一、确认 Docker Desktop 与 WSL2 后端已启用

Docker Compose 在 Windows 上依赖 Docker Desktop 的集成运行时,而 Docker Desktop 默认使用 WSL2 作为后端引擎。若未启用 WSL2 或未完成初始化,docker-compose 命令将无法识别服务配置或报错“Cannot connect to the Docker daemon”。

1、打开 PowerShell(管理员权限),执行 wsl –install 安装 WSL2 及默认发行版。

2、访问 Docker Desktop 设置 → “General” → 勾选 Use the WSL 2 based engine。

3、进入 “Resources” → “WSL Integration”,启用当前使用的 WSL 发行版(如 Ubuntu-22.04)。

4、重启 Docker Desktop,终端中运行 docker info | findstr “Server Version” 验证服务状态正常。

二、编写 docker-compose.yml 文件定义多服务拓扑

docker-compose.yml 是声明式配置文件,用于描述各容器的镜像、端口映射、卷挂载、网络连接及启动顺序。所有服务将共享默认桥接网络,支持通过服务名直接通信。

1、在项目根目录新建文本文件,命名为 docker-compose.yml。

2、写入以下最小可行示例(含 Nginx、MySQL、Redis 三个服务):

version: ‘3.8’

services:

web:

image: nginx:alpine

ports: [“8080:80”]

depends_on: [db, cache]

db:

image: mysql:8.0

environment: {MYSQL_ROOT_PASSWORD: “root123”}

volumes: [“./mysql-data:/var/lib/mysql”]

cache:

image: redis:7-alpine

command: redis-server –appendonly yes

三、在 PowerShell 或 Windows Terminal 中执行编排命令

docker-compose 命令需在 docker-compose.yml 所在目录下运行,其行为受当前工作路径约束。Windows 路径分隔符不影响 YAML 解析,但卷路径需使用正斜杠或双反斜杠。

1、打开 PowerShell,执行 cd C:\myapp 进入配置文件所在目录。

2、运行 docker-compose up -d 后台启动全部服务。

3、运行 docker-compose ps 查看各容器运行状态与端口映射。

4、运行 docker-compose logs -f web 实时跟踪指定服务日志输出。

四、使用 PowerShell 脚本自动化常见编排任务

当需频繁执行启停、重建、清理等组合动作时,可封装为 .ps1 脚本避免重复输入。脚本必须在启用执行策略的环境中运行,且依赖 docker-compose CLI 可被系统识别。

1、新建文件 start-all.ps1,内容为:

docker-compose down

docker-compose build –no-cache

docker-compose up -d

2、在 PowerShell 中执行 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 允许本地脚本运行。

3、执行 .\start-all.ps1 触发完整部署流程。

五、处理 Windows 特有路径与权限问题

Windows 主机路径挂载到 Linux 容器时,Docker Desktop 会自动转换路径格式,但若出现 “invalid mount config” 或 “permission denied”,通常源于 WSL2 文件系统权限或路径符号错误。

1、卷挂载路径统一使用正斜杠,例如 ./config/nginx.conf:/etc/nginx/nginx.conf,禁止混用反斜杠。

2、确保宿主机目录存在且非只读,对 WSL2 内部路径(如 /home/user/app)挂载需额外启用 WSL 集成并设置 /etc/wsl.conf 中的 automount 选项。

3、若 MySQL 容器启动失败并提示 “Can’t create/write to file”,请检查 ./mysql-data 目录是否由 Windows 用户拥有且未被其他进程(如杀毒软件)锁定。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。