您收到的警告和错误信息表明有两个问题:

  1. version 属性已过时

    • 从 Docker Compose 版本 2.0 开始,version 属性已被移除,您可以安全地删除它。Docker Compose 会自动使用适当的版本,因此不再需要显式声明它。
  2. 未定义的网络 halo_network

    • 错误信息指出您在 services 中引用了一个未在配置文件中定义的网络。要解决此问题,您需要在 Docker Compose 文件中定义 halo_network

修改后的 Docker Compose 文件示例

下面是更正后的 Docker Compose 文件。

services:
  halo2:  # 更改服务名称
    image: registry.fit2cloud.com/halo/halo:2.20
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      - halo_network  # 引用网络时不使用冒号
    volumes:
      - ./halo2_instance:/root/.halo2  # 更改数据卷
    ports:
      - "8092:8090"  # 更改端口映射
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8092/actuator/health/readiness"]  # 修正的健康检查
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    environment:
      - JVM_OPTS=-Xmx256m -Xms256m
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo2  # 确保数据库名称正确
      - --spring.r2dbc.username=root  # 用户名
      - --spring.r2dbc.password=6#DwN&JSa56  # 密码
      - --spring.sql.init.platform=mysql
      - --halo.external-url=http://localhost:8092/  # 更新外部访问地址

  halodb:  # 如果要使用共享数据库,可以保持此名称
    image: mysql:8.1.0
    restart: on-failure:3
    networks:
      - halo_network  # 引用网络时不使用冒号
    command: 
      - --default-authentication-plugin=caching_sha2_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
    volumes:
      - ./mysql:/var/lib/mysql  # 可以考虑改成 ./mysql2 以使用独立数据库
      - ./mysqlBackup:/data/mysqlBackup
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      - MYSQL_ROOT_PASSWORD=6#DwN&JSa56
      - MYSQL_DATABASE=halo2  # 如果使用不同数据库名称

networks:
  halo_network:  # 在这里定义 halo_network 网络

更新后的步骤

  1. 将上面更新后的内容复制到您的 docker-compose.yaml 文件中,并保存。

  2. 在命令行中再次运行以下命令:

    docker-compose up -d
    

这应该可以解决您遇到的问题。如果还有其他错误,请分享错误信息以便进一步诊断。