OrbStack 环境下 Dify 启动报错完整解决方案教程:validating docker-compose.yaml

更新:最好的办法是升级Orbstack的版本,之前使用1.x版本,更新到2.x版本就好了~,本文只作为记录,不作为实操建议

一、前言

本文针对「官网拉取 Dify 项目后,执行 docker compose up -d 启动失败」「启动后访问 localhost:8000 卡在登录页循环」两个核心问题,详细说明报错原因、版本校验步骤、完整解决方案,适配 OrbStack 内置 Docker 环境,确保新手也能一步到位解决问题,避免重复踩坑。

核心报错:validating docker-compose.yaml: services.web.env_file.0 must be a stringFailed to load .env: no such file or directory;核心异常:访问 http://localhost:8000 卡在登录页面,无法正常进入系统。

二、报错及异常核心原因(必看,理解本质)

很多人会误以为是 Docker 版本太低导致报错,但实际核心原因有 3 点,其中第 1 点是 OrbStack 专属问题,第 3 点是登录循环的关键原因:

1. 核心原因:OrbStack 内置 Docker Compose 语法兼容问题

你的 Docker 环境上下文是 orbstack(通过 docker version 可查看),OrbStack 自带的 docker compose 工具,对 Docker Compose YAML 语法的兼容性存在缺陷------不支持 env_file 的「列表格式」。

Dify 官网默认的 docker-compose.yaml 中,所有服务的 env_file 配置采用新版列表写法(适配标准 Docker Desktop):

yaml 复制代码
env_file:
  - ../.env

而 OrbStack 内置的 docker compose 只能识别「单行字符串格式」,无法解析列表格式,因此直接报错 services.web.env_file.0 must be a string(意为"env_file 的第 0 项必须是字符串,而非列表")。

2. 次要原因:缺少 Dify 必需的 .env 环境变量文件

Dify 启动依赖 .env 文件(存储数据库、Redis、系统密钥等核心配置),官网拉取的项目默认没有现成的.env 文件,只有 .env.example(示例文件),若未手动创建.env,会额外报错 Failed to load /xxx/.env: no such file or directory,同时提示The "DB_USER" variable is not set(因读不到 .env 中的数据库配置)。

3. 登录循环原因:.env 配置与 docker-compose.yaml 配置不一致

访问 localhost:8000 卡在登录页,核心是「.env 文件中的数据库、服务URL、密钥配置」与「docker-compose.yaml 中的服务配置」不匹配,导致前端无法正常连接后端 API,具体包括:

  • .env 中数据库主机(DB_HOST)、用户名(DB_USERNAME)、密码(DB_PASSWORD)与 docker-compose.yaml 中 db 服务配置不一致;
  • .env 中核心服务URL(如 SERVICE_API_URL、NEXT_PUBLIC_SOCKET_URL)未配置或配置错误,导致前后端通信失败;
  • 缺少必要的服务(如 weaviate、ssrf_proxy、plugin_daemon),.env 中配置了相关依赖但 docker-compose.yaml 未部署,导致服务启动不完整。

三、版本与环境校验步骤(排查问题的关键,必做)

在解决问题前,先通过以下步骤校验本地环境,确认问题根源,避免盲目操作:

步骤 1:查看 Docker 版本(确认版本是否达标)

打开终端,执行以下命令,查看 Docker 客户端和环境信息:

bash 复制代码
docker version

输出结果解读(重点看 2 处):

  • Client 部分:Version: 25.0.3(版本 ≥ 20.0.0 即可,你的版本完全达标);
  • Context 部分:Context: orbstack(确认当前使用的是 OrbStack 内置 Docker 环境,这是报错的核心诱因)。

步骤 2:校验 Dify 项目文件结构(确认 .env 文件是否缺失)

进入 Dify 项目根目录(终端执行命令):

bash 复制代码
cd /Users/shaonaiyi/my-workspace/git-project/dify

执行以下命令,查看根目录是否有 .env 文件:

bash 复制代码
ls -a

结果判断:

  • 若没有 .env 文件,只有 .env.example → 确认存在「.env 文件缺失」问题;
  • 若有 .env 文件,打开文件查看是否有 DB_USERNAMEDB_PASSWORDSERVICE_API_URL 等配置 → 若为空或配置错误,会导致启动失败或登录循环。

步骤 3:校验 docker-compose.yaml 语法(确认 env_file 格式 + 服务完整性)

进入 Docker 配置目录:

bash 复制代码
cd docker

打开 docker-compose.yaml 文件,重点检查 2 点:

  • 所有服务(web、api、worker 等)的 env_file 配置,若为列表格式(如下)→ 确认是 OrbStack 语法兼容问题:
yaml 复制代码
env_file:
  - ../.env
  • 是否包含 .env 中依赖的服务(weaviate、ssrf_proxy、plugin_daemon)→ 若缺失,会导致服务启动不完整,出现登录循环。

四、完整解决方案(一步到位,直接执行,解决报错+登录循环)

解决方案分 2 步:修复 docker-compose.yaml 语法(适配 OrbStack)、替换为你提供的完整 .env 配置(保证与 yaml 配置一致),新增缺失服务,全部操作无需修改其他配置,复制粘贴即可完成。

前提准备

确保终端当前路径在 Dify 项目根目录(若不在,执行命令切换):

bash 复制代码
cd /Users/shaonaiyi/my-workspace/git-project/dify

步骤 1:备份原有配置文件(避免误操作丢失)

先备份原有的 docker-compose.yaml 和(若有).env 文件,终端执行以下 2 条命令:

bash 复制代码
# 备份 docker-compose.yaml
mv docker/docker-compose.yaml docker/docker-compose.yaml.bak

# 若有 .env 文件,备份 .env(若无此文件,跳过此条)
mv .env .env.bak

步骤 2:创建/替换 .env 环境变量文件(解决缺失+登录循环)

在 Dify 项目根目录(/Users/shaonaiyi/my-workspace/git-project/dify),创建 .env 文件,复制你提供的完整配置粘贴保存(已适配 OrbStack,无需修改):

env 复制代码
# ------------------------------------------------------------------
# Essential defaults for Docker Compose deployments.
#
# For a default deployment, copy this file to .env and run:
#   docker compose up -d
#
# Optional and provider-specific variables live under docker/envs/.
# Copy an optional *.env.example file beside itself without the
# .example suffix when you need those advanced settings.
# Values in docker/.env take precedence over docker/envs/*.env files.
# ------------------------------------------------------------------

# Core service URLs
CONSOLE_API_URL=
CONSOLE_WEB_URL=
SERVICE_API_URL=
TRIGGER_URL=http://localhost
APP_API_URL=
APP_WEB_URL=
FILES_URL=
INTERNAL_FILES_URL=
ENDPOINT_URL_TEMPLATE=http://localhost/e/{hook_id}
NEXT_PUBLIC_SOCKET_URL=ws://localhost

# Runtime and security
LANG=C.UTF-8
LC_ALL=C.UTF-8
PYTHONIOENCODING=utf-8
UV_CACHE_DIR=/tmp/.uv-cache
SECRET_KEY=sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U
INIT_PASSWORD=
DEPLOY_ENV=PRODUCTION
CHECK_UPDATE_URL=https://updates.dify.ai
OPENAI_API_BASE=https://api.openai.com/v1
MIGRATION_ENABLED=true
FILES_ACCESS_TIMEOUT=300
ENABLE_COLLABORATION_MODE=false

# Logging and server workers
LOG_LEVEL=INFO
LOG_OUTPUT_FORMAT=text
LOG_FILE=/app/logs/server.log
LOG_FILE_MAX_SIZE=20
LOG_FILE_BACKUP_COUNT=5
LOG_DATEFORMAT=%Y-%m-%d %H:%M:%S
LOG_TZ=UTC
DEBUG=false
FLASK_DEBUG=false
ENABLE_REQUEST_LOGGING=False
DIFY_BIND_ADDRESS=0.0.0.0
DIFY_PORT=5001
SERVER_WORKER_AMOUNT=1
SERVER_WORKER_CLASS=gevent
SERVER_WORKER_CONNECTIONS=10
GUNICORN_TIMEOUT=360
CELERY_WORKER_CLASS=
CELERY_WORKER_AMOUNT=4
CELERY_AUTO_SCALE=false
CELERY_MAX_WORKERS=
CELERY_MIN_WORKERS=
COMPOSE_WORKER_HEALTHCHECK_DISABLED=true
COMPOSE_WORKER_HEALTHCHECK_INTERVAL=30s
COMPOSE_WORKER_HEALTHCHECK_TIMEOUT=30s

# Database
DB_TYPE=postgresql
DB_USERNAME=postgres
DB_PASSWORD=difyai123456
DB_HOST=db_postgres
DB_PORT=5432
DB_DATABASE=dify
SQLALCHEMY_POOL_SIZE=30
SQLALCHEMY_MAX_OVERFLOW=10
SQLALCHEMY_POOL_RECYCLE=3600
SQLALCHEMY_ECHO=false
SQLALCHEMY_POOL_PRE_PING=false
SQLALCHEMY_POOL_USE_LIFO=false
SQLALCHEMY_POOL_TIMEOUT=30
SQLALCHEMY_POOL_RESET_ON_RETURN=rollback
PGDATA=/var/lib/postgresql/data/pgdata
POSTGRES_MAX_CONNECTIONS=200
POSTGRES_SHARED_BUFFERS=128MB
POSTGRES_WORK_MEM=4MB
POSTGRES_MAINTENANCE_WORK_MEM=64MB
POSTGRES_EFFECTIVE_CACHE_SIZE=4096MB
POSTGRES_STATEMENT_TIMEOUT=0
POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT=0

# Redis and Celery
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_USERNAME=
REDIS_PASSWORD=difyai123456
REDIS_USE_SSL=false
REDIS_SSL_CERT_REQS=CERT_NONE
REDIS_SSL_CA_CERTS=
REDIS_SSL_CERTFILE=
REDIS_SSL_KEYFILE=
REDIS_DB=0
REDIS_KEY_PREFIX=
REDIS_MAX_CONNECTIONS=
REDIS_RETRY_RETRIES=3
REDIS_RETRY_BACKOFF_BASE=1.0
REDIS_RETRY_BACKOFF_CAP=10.0
REDIS_SOCKET_TIMEOUT=5.0
REDIS_SOCKET_CONNECT_TIMEOUT=5.0
REDIS_HEALTH_CHECK_INTERVAL=30
CELERY_BROKER_URL=redis://:difyai123456@redis:6379/1
CELERY_BACKEND=redis
BROKER_USE_SSL=false
CELERY_TASK_ANNOTATIONS=null
EVENT_BUS_REDIS_URL=
EVENT_BUS_REDIS_CHANNEL_TYPE=pubsub
EVENT_BUS_REDIS_USE_CLUSTERS=false

# Web and app limits
WEB_API_CORS_ALLOW_ORIGINS=*
CONSOLE_CORS_ALLOW_ORIGINS=*
COOKIE_DOMAIN=
NEXT_PUBLIC_COOKIE_DOMAIN=
NEXT_PUBLIC_BATCH_CONCURRENCY=5
API_SENTRY_DSN=
API_SENTRY_TRACES_SAMPLE_RATE=1.0
API_SENTRY_PROFILES_SAMPLE_RATE=1.0
WEB_SENTRY_DSN=
AMPLITUDE_API_KEY=
TEXT_GENERATION_TIMEOUT_MS=60000
CSP_WHITELIST=
ALLOW_EMBED=false
ALLOW_INLINE_STYLES=false
ALLOW_UNSAFE_DATA_SCHEME=false
TOP_K_MAX_VALUE=10
INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH=4000
LOOP_NODE_MAX_COUNT=100
MAX_TOOLS_NUM=10
MAX_PARALLEL_LIMIT=10
MAX_ITERATIONS_NUM=99
MAX_TREE_DEPTH=50
ENABLE_WEBSITE_JINAREADER=true
ENABLE_WEBSITE_FIRECRAWL=true
ENABLE_WEBSITE_WATERCRAWL=true
NEXT_PUBLIC_ENABLE_SINGLE_DOLLAR_LATEX=false
EXPERIMENTAL_ENABLE_VINEXT=false

# Storage and default vector store
STORAGE_TYPE=opendal
OPENDAL_SCHEME=fs
OPENDAL_FS_ROOT=storage
VECTOR_STORE=weaviate
VECTOR_INDEX_NAME_PREFIX=Vector_index
WEAVIATE_ENDPOINT=http://weaviate:8080
WEAVIATE_API_KEY=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih
WEAVIATE_GRPC_ENDPOINT=grpc://weaviate:50051
WEAVIATE_TOKENIZATION=word
WEAVIATE_PERSISTENCE_DATA_PATH=/var/lib/weaviate
WEAVIATE_QUERY_DEFAULTS_LIMIT=25
WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true
WEAVIATE_DEFAULT_VECTORIZER_MODULE=none
WEAVIATE_CLUSTER_HOSTNAME=node1
WEAVIATE_AUTHENTICATION_APIKEY_ENABLED=true
WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih
WEAVIATE_AUTHENTICATION_APIKEY_USERS=hello@dify.ai
WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED=true
WEAVIATE_AUTHORIZATION_ADMINLIST_USERS=hello@dify.ai
WEAVIATE_DISABLE_TELEMETRY=false
WEAVIATE_ENABLE_TOKENIZER_GSE=false
WEAVIATE_ENABLE_TOKENIZER_KAGOME_JA=false
WEAVIATE_ENABLE_TOKENIZER_KAGOME_KR=false

# Sandbox and SSRF proxy
CODE_EXECUTION_ENDPOINT=http://sandbox:8194
CODE_EXECUTION_API_KEY=dify-sandbox
CODE_EXECUTION_SSL_VERIFY=True
CODE_EXECUTION_POOL_MAX_CONNECTIONS=100
CODE_EXECUTION_POOL_MAX_KEEPALIVE_CONNECTIONS=20
CODE_EXECUTION_POOL_KEEPALIVE_EXPIRY=5.0
CODE_EXECUTION_CONNECT_TIMEOUT=10
CODE_EXECUTION_READ_TIMEOUT=60
CODE_EXECUTION_WRITE_TIMEOUT=10
SANDBOX_API_KEY=dify-sandbox
SANDBOX_GIN_MODE=release
SANDBOX_WORKER_TIMEOUT=15
SANDBOX_ENABLE_NETWORK=true
SANDBOX_HTTP_PROXY=http://ssrf_proxy:3128
SANDBOX_HTTPS_PROXY=http://ssrf_proxy:3128
SANDBOX_PORT=8194
PIP_MIRROR_URL=
SSRF_PROXY_HTTP_URL=http://ssrf_proxy:3128
SSRF_PROXY_HTTPS_URL=http://ssrf_proxy:3128
SSRF_HTTP_PORT=3128
SSRF_COREDUMP_DIR=/var/spool/squid
SSRF_REVERSE_PROXY_PORT=8194
SSRF_SANDBOX_HOST=sandbox
SSRF_DEFAULT_TIME_OUT=5
SSRF_DEFAULT_CONNECT_TIME_OUT=5
SSRF_DEFAULT_READ_TIME_OUT=5
SSRF_DEFAULT_WRITE_TIME_OUT=5
SSRF_POOL_MAX_CONNECTIONS=100
SSRF_POOL_MAX_KEEPALIVE_CONNECTIONS=20
SSRF_POOL_KEEPALIVE_EXPIRY=5.0

# Plugin daemon
DB_PLUGIN_DATABASE=dify_plugin
EXPOSE_PLUGIN_DAEMON_PORT=5002
PLUGIN_DAEMON_PORT=5002
PLUGIN_DAEMON_KEY=lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi
PLUGIN_DAEMON_URL=http://plugin_daemon:5002
PLUGIN_MAX_PACKAGE_SIZE=52428800
PLUGIN_MODEL_SCHEMA_CACHE_TTL=3600
PLUGIN_PPROF_ENABLED=false
PLUGIN_DEBUGGING_HOST=0.0.0.0
PLUGIN_DEBUGGING_PORT=5003
EXPOSE_PLUGIN_DEBUGGING_HOST=localhost
EXPOSE_PLUGIN_DEBUGGING_PORT=5003
PLUGIN_DIFY_INNER_API_KEY=QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1
PLUGIN_DIFY_INNER_API_URL=http://api:5001
FORCE_VERIFYING_SIGNATURE=true
PLUGIN_STDIO_BUFFER_SIZE=1024
PLUGIN_STDIO_MAX_BUFFER_SIZE=5242880
PLUGIN_PYTHON_ENV_INIT_TIMEOUT=120
PLUGIN_MAX_EXECUTION_TIMEOUT=600
PLUGIN_STORAGE_TYPE=local
PLUGIN_STORAGE_LOCAL_ROOT=/app/storage
PLUGIN_WORKING_PATH=/app/storage/cwd
PLUGIN_INSTALLED_PATH=plugin
PLUGIN_PACKAGE_CACHE_PATH=plugin_packages
PLUGIN_MEDIA_CACHE_PATH=assets
PLUGIN_STORAGE_OSS_BUCKET=
PLUGIN_SENTRY_ENABLED=false
PLUGIN_SENTRY_DSN=
MARKETPLACE_ENABLED=true
MARKETPLACE_API_URL=https://marketplace.dify.ai
MARKETPLACE_URL=

# Nginx and Docker Compose
NGINX_SERVER_NAME=_
NGINX_HTTPS_ENABLED=false
NGINX_PORT=80
NGINX_SSL_PORT=443
NGINX_SSL_CERT_FILENAME=dify.crt
NGINX_SSL_CERT_KEY_FILENAME=dify.key
NGINX_SSL_PROTOCOLS=TLSv1.2 TLSv1.3
NGINX_WORKER_PROCESSES=auto
NGINX_CLIENT_MAX_BODY_SIZE=100M
NGINX_KEEPALIVE_TIMEOUT=65
NGINX_PROXY_READ_TIMEOUT=3600s
NGINX_PROXY_SEND_TIMEOUT=3600s
NGINX_ENABLE_CERTBOT_CHALLENGE=false
EXPOSE_NGINX_PORT=80
EXPOSE_NGINX_SSL_PORT=443
COMPOSE_PROFILES=${VECTOR_STORE:-weaviate},${DB_TYPE:-postgresql}

步骤 3:替换 docker-compose.yaml 文件(适配 OrbStack 语法+补充缺失服务)

进入 docker 目录:

bash 复制代码
cd docker

创建新的docker-compose.yaml 文件,复制以下内容粘贴保存(已修复所有 env_file 格式,适配 OrbStack,补充 weaviate、ssrf_proxy、plugin_daemon 服务,与 .env 配置完全匹配):

yaml 复制代码
version: '3.8'

services:
  api:
    image: langgenius/dify-api:latest
    restart: always
    env_file: ../.env
    volumes:
      - ./volumes/app:/app
      - ./volumes/logs:/app/logs
    depends_on:
      - db_postgres
      - redis
      - weaviate
      - plugin_daemon

  web:
    image: langgenius/dify-web:latest
    restart: always
    env_file: ../.env
    ports:
      - "8000:3000"
    depends_on:
      - api

  worker:
    image: langgenius/dify-api:latest
    restart: always
    env_file: ../.env
    volumes:
      - ./volumes/app:/app
      - ./volumes/logs:/app/logs
    command: worker
    depends_on:
      - db_postgres
      - redis
      - weaviate
      - plugin_daemon

  websocket:
    image: langgenius/dify-api:latest
    restart: always
    env_file: ../.env
    command: websocket
    depends_on:
      - db_postgres
      - redis

  sandbox:
    image: langgenius/dify-sandbox:latest
    restart: always
    env_file: ../.env
    depends_on:
      - ssrf_proxy

  db_postgres:
    image: postgres:15-alpine
    restart: always
    env_file: ../.env
    volumes:
      - ./volumes/postgres:/var/lib/postgresql/data/pgdata
    environment:
      POSTGRES_PASSWORD: difyai123456
      POSTGRES_USER: postgres
      POSTGRES_DB: dify

  redis:
    image: redis:7-alpine
    restart: always
    env_file: ../.env
    volumes:
      - ./volumes/redis:/data

  weaviate:
    image: semitechnologies/weaviate:1.23.7
    restart: always
    env_file: ../.env
    volumes:
      - ./volumes/weaviate:/var/lib/weaviate
    ports:
      - "8080:8080"
      - "50051:50051"

  ssrf_proxy:
    image: langgenius/dify-ssrf-proxy:latest
    restart: always
    env_file: ../.env
    volumes:
      - ./volumes/ssrf_proxy:/var/spool/squid

  plugin_daemon:
    image: langgenius/dify-plugin-daemon:latest
    restart: always
    env_file: ../.env
    volumes:
      - ./volumes/app:/app
      - ./volumes/plugin:/app/plugin
      - ./volumes/plugin_packages:/app/plugin_packages
    depends_on:
      - db_postgres
      - redis

步骤 4:启动 Dify 并验证(解决登录循环)

在 docker 目录下,执行启动命令(首次启动会拉取依赖镜像,耐心等待):

bash 复制代码
docker compose up -d

启动后,执行以下命令验证所有服务是否正常运行:

bash 复制代码
docker compose ps

验证标准:所有服务(api、web、worker、db_postgres、redis、weaviate、ssrf_proxy、plugin_daemon、sandbox)的状态均为 running,无 exitedunhealthy

补充验证:若部分服务启动失败,执行以下命令查看日志,排查具体问题:

bash 复制代码
# 查看 api 服务日志(最易出问题)
docker compose logs -f api

最后,打开浏览器访问 http://localhost:8000,即可正常进入 Dify 登录页面(无循环),使用默认配置即可登录(若未设置 INIT_PASSWORD,可直接登录或参考 Dify 官方文档初始化密码)。

五、常见问题补充(避坑指南)

  1. 启动后提示「端口 8000 被占用」? 解决方案:修改 docker-compose.yaml 中 web 服务的端口,将 8000:3000 改为 8001:3000(或其他未被占用的端口),重新执行docker compose up -d
  2. 启动后 db_postgres 服务报错「权限不足」? 解决方案:终端执行命令,给 volumes 目录授权:chmod -R 777 docker/volumes,然后重新启动。
  3. 启动后 weaviate 服务报错「端口 8080/50051 被占用」? 解决方案:关闭占用该端口的服务,或修改 docker-compose.yaml 中 weaviate 服务的端口映射(如 8081:808050052:50051),同时同步修改 .env 中的 WEAVIATE_ENDPOINTWEAVIATE_GRPC_ENDPOINT
  4. 访问 localhost:8000 仍有登录循环? 解决方案:1. 确认所有服务均正常运行;2. 清除浏览器缓存后重新访问;3. 检查 .env 中 NEXT_PUBLIC_SOCKET_URL=ws://localhost 配置是否正确,无需修改。
  5. 后续想切换回 Docker Desktop 环境? 解决方案:终端执行 docker context use desktop-linux(Mac 系统),切换后可直接使用 Dify 官网原版docker-compose.yaml,无需修改。

六、总结

本次报错核心是「OrbStack 内置 Docker Compose 语法兼容缺陷」,而非 Docker 版本问题;次要问题是「.env 文件缺失」;登录循环的核心是「配置不一致+缺失依赖服务」。通过「修复 env_file 格式 + 补充完整 .env 配置 + 新增缺失服务」,即可一次性解决所有问题,无需复杂操作。

后续若重新拉取 Dify 官网项目,只需重复本教程的「步骤 2-4」,即可快速适配 OrbStack 环境,避免再次踩坑。

补充说明:.env 中配置的 CHECK_UPDATE_URL=https://updates.dify.ai(Dify 更新检查地址)、MARKETPLACE_API_URL=https://marketplace.dify.ai(Dify 插件市场地址)可正常使用,无需修改;OPENAI_API_BASE=https://api.openai.com/v1 因网页解析失败,若需使用 OpenAI 相关功能,需确认该地址可正常访问或替换为可用地址。

相关推荐
一只小bit2 小时前
Docker 镜像制作:包含自定义镜像及常用命令
运维·docker·容器
苍煜3 小时前
K8s 核心资源详解(Pod/Deployment/Service 实战)
云原生·容器·kubernetes
江湖有缘3 小时前
容器化笔记:Memory应用在Docker环境下的部署与配置
笔记·docker·容器
苍煜3 小时前
Docker Compose 多容器编排实战(系列第五篇:开发环境一键部署)
运维·docker·容器
sbjdhjd4 小时前
企业级 Docker 镜像仓库建设与运维规范
linux·运维·docker·云原生·容器·eureka·开源
ChaITSimpleLove4 小时前
优化 WSL2 性能:为 Docker 和 K8s 定制高效内存配置指南
docker·容器·性能优化·kubernetes·wsl2·windows开发·pwsh
苍煜5 小时前
K8s 网络与存储(容器网络互通与数据持久化)
网络·容器·kubernetes
苍煜5 小时前
K8s 集群快速搭建(系列第八篇:单机/多节点集群实战)
java·容器·kubernetes
江湖有缘5 小时前
使用Docker部署Docker Compose文件管理工具Dockge
运维·docker·容器