true]; // 查找要修改的服务 $mainService = null; $firstService = null; foreach ($content['services'] as $name => $service) { // 记录第一个服务 if ($firstService === null) { $firstService = $name; } // 检查是否有labels.main=true的服务 if (isset($service['labels']['main']) && $service['labels']['main'] === true) { $mainService = $name; break; } } // 确定要修改的服务名称 $targetService = $mainService ?? $firstService; if ($targetService !== null) { $service = &$content['services'][$targetService]; // 更新网络配置 $service['networks'] = [$networkName]; // 处理ports参数 if (isset($params['ports'])) { $service['ports'] = $params['ports']; } // 处理volumes参数 if (isset($params['volumes'])) { $service['volumes'] = $params['volumes']; } // 处理container_name参数 if (isset($params['container_name'])) { $service['container_name'] = $params['container_name']; } } // 生成YAML内容 $yamlContent = Yaml::dump($content, 4, 2); // 替换${xxx}格式变量 if (isset($params['config'])) { $yamlContent = preg_replace_callback('/\$\{(.*?)\}/', function($matches) use ($params) { $varName = $matches[1]; return $params['config'][$varName] ?? $matches[0]; }, $yamlContent); } // 写回文件 file_put_contents($savePath ?? $filePath, $yamlContent); return true; } catch (ParseException) { // YAML解析错误 return false; } catch (\Exception) { // 其他错误 return false; } } }