setup-docker-compose
À propos
Cette compétence Claude aide les développeurs à configurer Docker Compose pour des environnements de développement R multi-conteneurs. Elle configure les services, volumes, réseaux et variables d'environnement pour des configurations reproductibles combinant R avec des bases de données ou des API. Utilisez-la pour orchestrer des conteneurs basés sur R ou pour gérer des configurations de développement/production.
Installation rapide
Claude Code
Recommandénpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/setup-docker-composeCopiez et collez cette commande dans Claude Code pour installer cette compétence
Documentation
name: setup-docker-compose description: > 为多容器 R 开发环境配置 Docker Compose。涵盖服务定义、卷挂载、网络、 环境变量以及开发与生产配置。适用于将 R 与其他服务(数据库、API)一起运行、 设置可重现的 R 开发环境、编排基于 R 的 MCP 服务器容器,或为 R 项目管理 环境变量和卷挂载。 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: containerization complexity: intermediate language: Docker tags: docker-compose, orchestration, development, volumes locale: zh-CN source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16
配置 Docker Compose
为 R 开发和部署环境配置 Docker Compose。
适用场景
- 将 R 与其他服务(数据库、API)一起运行
- 设置可重现的开发环境
- 编排基于 R 的 MCP 服务器容器
- 管理环境变量和卷挂载
输入
- 必需:R 服务的 Dockerfile
- 必需:要挂载的项目目录
- 可选:附加服务(数据库、缓存、Web 服务器)
- 可选:环境变量配置
步骤
第 1 步:创建 docker-compose.yml
version: '3.8'
services:
r-dev:
build:
context: .
dockerfile: Dockerfile
container_name: r-dev
image: r-dev:latest
volumes:
- .:/workspace
- renv-cache:/workspace/renv/cache
stdin_open: true
tty: true
environment:
- TERM=xterm-256color
- R_LIBS_USER=/workspace/renv/library
- RENV_PATHS_CACHE=/workspace/renv/cache
command: R
restart: unless-stopped
volumes:
renv-cache:
driver: local
预期结果: docker-compose.yml 文件存在,定义了 R 服务,包含项目目录和 renv 缓存的卷挂载,以及 R 库路径的环境变量。
失败处理: 如果 YAML 语法无效,使用 docker compose config 验证。确保缩进使用空格(不是制表符),所有包含特殊字符的字符串值都加引号。
第 2 步:添加附加服务(如需要)
services:
r-dev:
# ... as above
depends_on:
- postgres
environment:
- DB_HOST=postgres
- DB_PORT=5432
postgres:
image: postgres:16
container_name: r-postgres
environment:
POSTGRES_DB: analysis
POSTGRES_USER: ruser
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
volumes:
- pgdata:/var/lib/postgresql/data
ports:
- "5432:5432"
volumes:
renv-cache:
pgdata:
预期结果: 附加服务(如 PostgreSQL)已定义,具有自己的卷、环境变量和端口映射。R 服务的 depends_on 引用了新服务。
失败处理: 如果数据库服务启动失败,检查 docker compose logs postgres 获取初始化错误。验证 POSTGRES_PASSWORD_FILE 等环境变量指向有效的密钥,或在开发中切换到 POSTGRES_PASSWORD。
第 3 步:配置网络
对于需要 localhost 访问的服务(如 MCP 服务器):
services:
r-dev:
network_mode: "host"
对于隔离网络:
services:
r-dev:
networks:
- app-network
ports:
- "3000:3000"
networks:
app-network:
driver: bridge
预期结果: 网络配置适当:需要 localhost 访问的服务(MCP 服务器)使用 host 模式,或使用桥接网络加显式端口映射实现隔离服务。
失败处理: 如果服务无法通信,验证它们在同一网络上。使用桥接网络时,使用服务名作为主机名(如 postgres 而非 localhost)。使用 host 模式时,使用 localhost 并确保端口不冲突。
第 4 步:管理环境变量
创建 .env 文件(加入 git 忽略):
R_VERSION=4.5.0
GITHUB_PAT=your_token_here
在 compose 中引用:
services:
r-dev:
build:
args:
R_VERSION: ${R_VERSION}
env_file:
- .env
预期结果: .env 文件存在(已 git 忽略)包含项目特定变量,docker-compose.yml 通过 env_file 或变量插值(${VAR})引用它。
失败处理: 如果变量未解析,确保 .env 文件与 docker-compose.yml 在同一目录。运行 docker compose config 查看所有变量展开后的解析配置。
第 5 步:构建和运行
# Build images
docker compose build
# Start services
docker compose up -d
# Attach to R session
docker compose exec r-dev R
# View logs
docker compose logs -f r-dev
# Stop services
docker compose down
预期结果: 所有服务启动。R 会话可访问。
失败处理: 检查 docker compose logs 获取启动错误。常见问题:端口冲突、缺少环境变量。
第 6 步:创建开发覆盖文件
创建 docker-compose.override.yml 用于本地开发设置:
services:
r-dev:
volumes:
- /path/to/local/packages:/extra-packages
environment:
- DEBUG=true
这会自动与 docker-compose.yml 合并。
预期结果: docker-compose.override.yml 文件存在,包含开发特定设置(额外卷、调试标志),运行 docker compose up 时自动应用。
失败处理: 如果覆盖未生效,验证文件名完全是 docker-compose.override.yml。运行 docker compose config 确认合并。对于显式覆盖文件,使用 docker compose -f docker-compose.yml -f custom-override.yml up。
验证清单
-
docker compose build无错误完成 -
docker compose up启动所有服务 - 卷挂载正确地在主机和容器间共享文件
- 环境变量在容器内可用
- 服务之间可以互相通信
-
docker compose down干净地停止所有服务
常见问题
- 卷挂载权限:Linux 容器可能以 root 身份创建文件。使用
user:指令或修复权限。 - 端口冲突:检查主机上是否已有服务使用相同端口
- Docker Desktop 与 CLI:
docker compose(v2)与docker-compose(v1)。使用 v2。 - WSL 路径挂载:从 WSL 挂载 Windows 目录时使用
/mnt/c/...路径 - 命名卷与绑定挂载:命名卷在重建后保持;绑定挂载立即反映主机更改
相关技能
create-r-dockerfile- 创建 compose 引用的 Dockerfilecontainerize-mcp-server- MCP 服务器的 compose 配置optimize-docker-build-cache- 加速 compose 构建
Dépôt GitHub
Compétences associées
railway-docs
DocumentationCette compétence récupère la documentation actuelle de Railway pour répondre aux questions sur les fonctionnalités, le fonctionnement ou des URL spécifiques de la documentation. Elle garantit que les développeurs reçoivent des informations précises et à jour directement depuis les sources officielles de Railway. Utilisez-la lorsque les utilisateurs demandent comment fonctionne Railway ou font référence à la documentation de Railway.
n8n-code-python
DocumentationCette compétence Claude offre un accompagnement expert pour écrire du code Python dans les nœuds Code de n8n, en particulier pour utiliser la bibliothèque standard de Python et travailler avec la syntaxe spéciale de n8n comme `_input`, `_json` et `_node`. Elle aide les développeurs à comprendre les limites de Python dans n8n et recommande d'utiliser JavaScript pour la plupart des workflows, tout en proposant des solutions Python pour des besoins spécifiques de transformation de données.
archon
DocumentationLa compétence Archon offre une recherche sémantique alimentée par RAG et une gestion de projet via une API REST. Utilisez-la pour interroger la documentation, gérer des projets/tâches hiérarchiques et effectuer de la recherche de connaissances avec des capacités de téléchargement de documents. Priorisez toujours Archon en premier lors de la recherche dans une documentation externe avant d'utiliser d'autres sources.
n8n-code-javascript
DocumentationCette compétence Claude fournit des conseils d'expert pour écrire du code JavaScript dans les nœuds Code d'n8n. Elle couvre la syntaxe essentielle spécifique à n8n comme les variables `$input`/`$json`, les assistants HTTP et la gestion des DateTime, tout en résolvant les erreurs courantes. Utilisez-la lors du développement de workflows n8n nécessitant un traitement JavaScript personnalisé dans les nœuds Code.
