Hermes AgentをDocker環境で動かすようにしてみました。
Hermes Desktopを以下の公式サイトからダウンロードしてインストールした上で、以下を実行。
ここからの手順は、Geminiに教えてもらいました。
Step 1. Ollamaを他のホストからアクセスできるようにする
デフォルト状態のOllamaは localhost からのアクセスしか受け付けないため、Dockerコンテナ(別ネットワーク)からの接続が拒否されます。
Ollamaの設定の以下の部分がデフォルトでオフなので、オンに変更します。
Step 2. 作業用ディレクトリと設定ファイルの準備
安全に作業するための専用ディレクトリを作成し、SlackのトークンやClaudeのAPIキーを管理する環境変数ファイル(.env)を作成します。
% mkdir -p ~/hermes-sandbox/workspace
% cd hermes-sandbox
% vi .env
この時点では、Geminiに教えてもらったテンプレートのままで作業を継続。
# Slack連携用(必要に応じて)
SLACK_BOT_TOKEN=xoxb-your-slack-bot-token
SLACK_APP_TOKEN=xapp-your-slack-app-token
# Anthropic API(Claude Code 有償版用)
ANTHROPIC_API_KEY=sk-ant-api03-...
# Ollamaへの接続先設定(Dockerからホストへのエイリアス)
OLLAMA_API_BASE=http://host.docker.internal:11434
Step 3: Dockerfile の作成
コンテナ化することで、万が一エージェントが予期せぬコマンドを実行したり、外部から不正な指示が入ったりした場合でも、影響をコンテナ内に隔離し、Mac本体(ホストOS)のシステムや個人ファイルを保護することができます。
Node.js(Claude Code用)やHermesの実行環境が含まれた安全なコンテナを作成します。
FROM node:20-slim
# セキュリティ対策: rootユーザーではなく node ユーザーで実行
ENV NODE_ENV=production
WORKDIR /home/node/app
# 必要なツール(git、curl、python等)のインストール
RUN apt-get update && apt-get install -y \
git \
curl \
python3 \
make \
g++ \
&& rm -rf /var/lib/apt/lists/*
# Hermes Agent と Claude Code CLI をグローバルインストール
# (※提供されているインストール方法に応じて調整してください)
RUN npm install -g @anthropic-ai/claude-code
# もしHermesがnpmパッケージ、あるいはバイナリならここにインストール処理を記述
# RUN npm install -g hermes-agent
# 所有者をnodeユーザーに変更
RUN chown -R node:node /home/node
USER node
# 待機用コマンド(コンテナを常時起動させる場合)
CMD ["tail", "-f", "/dev/null"]
Step 4: docker-compose.yml の作成
起動時のコマンドをシンプルにし、ボリュームマウントやネットワークの設定を一元管理します。
version: '3.8'
services:
hermes-agent:
build: .
container_name: hermes_secure_agent
restart: unless-stopped
env_file:
- .env
volumes:
# プロジェクト作業領域だけを限定マウント(ここ以外は触れない)
- ./workspace:/home/node/app/workspace
extra_hosts:
# コンテナ内から「host.docker.internal」でMac本体にアクセス可能にする設定
- "host.docker.internal:host-gateway"
# エージェントが勝手に特権コマンドを実行できないように制限
privileged: false
cap_drop:
- ALL
コンテナの起動
すべて配置できたら、以下のコマンドでコンテナをビルド・起動します。
実際に試した結果
% docker compose up -d --build
[+] Building 53.1s (12/12) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> [1/5] FROM docker.io/library/node:20-slim 7.5s
=> [2/5] WORKDIR /home/node/app 0.1s
=> [3/5] RUN apt-get update && apt-get install -y git curl python3 make g++ 23.4s
=> [4/5] RUN npm install -g @anthropic-ai/claude-code 7.8s
=> [5/5] RUN chown -R node:node /home/node 0.1s
<中略>
[+] up 3/3
✔ Image hermes-sandbox-hermes-agent Built 53.1s
✔ Network hermes-sandbox_default Created 0.0s
✔ Container hermes_secure_agent Started 0.2s
動作確認
# コンテナ内のシェルに入る
docker compose exec hermes-agent bash
# 1. ホストのOllamaと通信できるか確認
curl http://host.docker.internal:11434/api/tags
# (gemma4:26b などのリストが返ってくれば成功です)
# 2. Claude Codeが動くか確認
claude --version
実際に試した結果
% docker compose exec hermes-agent bash
node@d76bb3aa1dff:~/app$ curl http://host.docker.internal:11434/api/tags
{"models":[{"name":"gemma4:26b","model":"gemma4:26b","modified_at":"2026-05-06T15:08:34.417623696+09:00","size":17987581215,"digest":"5571076f3d70050487b26b341705799e0ab29b808164f90d20d4cf84f699d251","details":{"parent_model":"","format":"gguf","family":"gemma4","families":["gemma4"],"parameter_size":"25.8B","quantization_level":"Q4_K_M"},"capabilities":["completion","tools","thinking"]},{"name":"gemma4:e4b", <中略> }]}
node@d76bb3aa1dff:~/app$ claude --version
2.1.167 (Claude Code)
node@d76bb3aa1dff:~/app$ exit
あとは .env を更新した上で、以下を実行すれば完成。
docker compose down && docker compose up -d
Hermes Desktopを起動してOllamaとの接続を確認
Hermes Desktopを起動し、ウィンドウ右下に表示されるモデルのところでOllamaに接続されていることが確認できました。

