Docker 中的 goose
本指南涵盖两种与 Docker 相关的场景:
- 在 Docker 内运行 goose - 在容器中构建并运行 goose 进程本身
- 在 Docker 中运行扩展 - goose 在宿主机上运行,但在容器内执行扩展
在 Docker 内运行 goose
你可以在 Docker 容器内从源码构建 goose。这种方式通过创建隔离环境带来安全上的好处,也提高了一致性和可移植性。例如,如果你需要在平时不使用的平台(例如 Ubuntu)上排查错误,可以用 Docker 轻松调试。
开始之前,你需要修改 Dockerfile 和 docker-compose.yml 文件以适应你的需求。可以考虑的一些改动包括:
-
必需: 在
docker-compose.yml文件中把 API 密钥、provider 和模型设为环境变量,因为 keyring 设置在 Docker 中的 Ubuntu 上不起作用。本示例使用 Google Gemini。 -
可选: 在
Dockerfile中把基础镜像换成其他 Linux 发行版。本示例使用 Ubuntu,但你可以换成 CentOS、Fedora 或 Alpine 等其他发行版。 -
可选: 在
docker-compose.yml文件中挂载你个人的 goose 设置和 hints 文件。这样就可以在 Docker 容器内使用个人设置和 hints 文件。
若要以自动化方式在容器中运行 goose,见 Container-Use MCP 扩展,它可以通过对话为你创建和管理容器。
设置好凭据后,用以下命令构建 Docker 镜像:
docker-compose -f documentation/docs/docker/docker-compose.yml build
接下来,用以下命令运行容器并连接到它:
docker-compose -f documentation/docs/docker/docker-compose.yml run --rm goose-cli
在容器内运行以下命令配置 goose:
goose configure
当提示是否把 API 密钥保存到 keyring 时,选择 No,因为你已经通过环境变量传递了 API 密钥。
再配置一次 goose,这次可以添加你需要的任何扩展。
之后可以启动会话:
goose session
现在应该能够连接 goose,并且已启用你配置的扩展。
在 Docker 容器中运行扩展
--container 标志让你可以在 Docker 容器内运行 goose 扩展。
用法
goose session --container <container-id-or-name>
config.yaml 中配置的扩展会自动在指定容器内运行。用 docker ps 查找容器 ID 或名称。
要求
- 扩展必须存在于容器中,并且可以通过扩展配置中使用的相同路径访问
- 要运行内置扩展,必须在容器内安装 goose CLI
示例
# Start an interactive session with extensions from config.yaml
goose session --container my-dev-container
# Start a non-interactive session with instructions
goose run --container my-dev-container --text "your instructions here"
# Specify an extension to run in the container
goose session --container 4c76a1beed85 --with-extension "uvx mcp-server-fetch"
# Workaround: Use full path if container can't find the command
goose session --container 4c76a1beed85 --with-extension "/root/.local/bin/uvx mcp-server-fetch"