From 843024d7da5f25923f023cbcf6ac9ee349764ae1 Mon Sep 17 00:00:00 2001 From: yangzhaohan Date: Mon, 6 Jul 2026 10:47:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20Docker=20=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=20+=20=E7=AB=AF=E5=8F=A3=E5=8F=AF=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dockerfile 设置 GOPROXY=https://goproxy.cn,direct 解决国内网络问题 - 新增 addr 配置项,支持自定义端口,默认 :8080 - docker-compose 端口改为 ${OPS_MCP_PORT:-9090} - 移除 EXPOSE 指令(端口通过 compose 管理) Co-Authored-By: Claude Opus 4.7 (1M context) --- .env.example | 2 +- Dockerfile | 3 ++- cmd/server/main.go | 4 ++-- config/config.go | 3 ++- docker-compose.yml | 3 +++ internal/server/server.go | 6 +++--- 6 files changed, 13 insertions(+), 8 deletions(-) diff --git a/.env.example b/.env.example index 5174249..3955a67 100644 --- a/.env.example +++ b/.env.example @@ -1 +1 @@ -OPS_MCP_TRANSPORT=sse +OPS_MCP_PORT=9090 diff --git a/Dockerfile b/Dockerfile index 6034d86..8093271 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ FROM golang:1.24-alpine AS builder +ENV GOPROXY=https://goproxy.cn,direct + WORKDIR /app COPY go.mod go.sum ./ @@ -15,5 +17,4 @@ RUN apk add --no-cache docker-cli ca-certificates COPY --from=builder /server /server COPY config/ /config/ -EXPOSE 8080 ENTRYPOINT ["/server"] diff --git a/cmd/server/main.go b/cmd/server/main.go index 17ce24f..cf0b1f8 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -17,10 +17,10 @@ func main() { cfg, err := config.Load() if err != nil { slog.Warn("config load failed, using defaults", "err", err) - cfg = &config.Config{Transport: "stdio"} + cfg = &config.Config{Transport: "stdio", Addr: ":8080"} } - if err := server.Run(cfg.Transport, tool.NewDockerTool()); err != nil { + if err := server.Run(cfg.Transport, cfg.Addr, tool.NewDockerTool()); err != nil { slog.Error("fatal", "err", err) os.Exit(1) } diff --git a/config/config.go b/config/config.go index d00ff45..c0e8afa 100644 --- a/config/config.go +++ b/config/config.go @@ -8,6 +8,7 @@ import ( type Config struct { Transport string `mapstructure:"transport"` // stdio | sse + Addr string `mapstructure:"addr"` // 监听地址,默认 :8080 } func Load() (*Config, error) { @@ -20,8 +21,8 @@ func Load() (*Config, error) { v.SetEnvPrefix("OPS_MCP") v.AutomaticEnv() v.SetDefault("transport", "stdio") + v.SetDefault("addr", ":8080") - // 配置文件不存在不算错误,直接用默认值 + 环境变量 if err := v.ReadInConfig(); err != nil { slog.Warn("no config file found, using defaults and env vars", "err", err) } diff --git a/docker-compose.yml b/docker-compose.yml index 5da0fc4..db5b0ee 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,7 +6,10 @@ services: image: ops-mcp:latest container_name: ops-mcp restart: unless-stopped + ports: + - "${OPS_MCP_PORT:-9090}:${OPS_MCP_PORT:-9090}" environment: - OPS_MCP_TRANSPORT=sse + - OPS_MCP_ADDR=:${OPS_MCP_PORT:-9090} volumes: - /var/run/docker.sock:/var/run/docker.sock:ro diff --git a/internal/server/server.go b/internal/server/server.go index 5cade1c..35549ba 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -16,7 +16,7 @@ import ( const version = "0.1.0" // Run 启动 MCP Server。 -func Run(transport string, tools ...tool.Tool) error { +func Run(transport, addr string, tools ...tool.Tool) error { ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -60,8 +60,8 @@ func Run(transport string, tools ...tool.Tool) error { slog.Info("starting MCP server", "transport", "stdio") return server.ServeStdio(mcpServer) case "sse": - slog.Info("starting MCP server", "transport", "sse", "addr", ":8080") - return server.NewSSEServer(mcpServer).Start(":8080") + slog.Info("starting MCP server", "transport", "sse", "addr", addr) + return server.NewSSEServer(mcpServer).Start(addr) default: return fmt.Errorf("unknown transport: %s", transport) }