用途
Docker 技能用于在隔离的 Docker 容器中运行研究代码,同时让 Feynman 保持在宿主机上运行。容器获得项目文件并执行命令,结果会自动同步回宿主机。
适用场景包括:
- 用户在 /replicate 或 /autoresearch 中选择「Docker Sandbox」作为执行环境
- 运行来自论文仓库的不可信代码
- 需要安装软件包或修改系统状态的实验
- 用户希望以安全、隔离的方式为 Feynman 工作流运行研究代码的任何情况
工作原理
- 为研究代码构建或拉取一个合适的基础镜像
- 将项目目录挂载到容器中
- 在容器内运行实验命令
- 结果写回挂载的目录
在容器中运行命令
针对 Python 研究代码(最常见):
docker run --rm -v "$(pwd)":/workspace -w /workspace python:3.11 bash -c "
pip install -r requirements.txt &&
python train.py
"
针对带有 Dockerfile 的项目:
docker build -t feynman-experiment .
docker run --rm -v "$(pwd)/results":/workspace/results feynman-experiment
针对 GPU 工作负载:
docker run --rm --gpus all -v "$(pwd)":/workspace -w /workspace pytorch/pytorch:latest bash -c "
pip install -r requirements.txt &&
python train.py
"
选择基础镜像
按研究类型选择:
- Python 机器学习 / 深度学习:
pytorch/pytorch:latest或tensorflow/tensorflow:latest-gpu - Python 通用:
python:3.11 - Node.js:
node:20 - R / 统计:
rocker/r-ver:4 - Julia:
julia:1.10 - 多语言:
ubuntu:24.04并手动安装所需环境
持久化容器
对于迭代式实验(如 /autoresearch),创建一个命名容器而不是使用 --rm。根据实验选择一个有描述性的名称:
docker create --name <name> -v "$(pwd)":/workspace -w /workspace python:3.11 tail -f /dev/null
docker start <name>
docker exec <name> bash -c "pip install -r requirements.txt"
docker exec <name> bash -c "python train.py"
这样可以在多次迭代之间保留已安装的软件包。清理方式:
docker stop <name> && docker rm <name>
注意事项
- 挂载的工作区会自动将结果同步回宿主机
- 容器默认启用网络——如需完全隔离,可添加
--network none - 如需 GPU 访问,Docker 必须配置 NVIDIA Container Toolkit