2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ollama + Hermes Agent環境構築をめざして、まずはセキュリティのためDockerでHermes Agentを動かすようにした

2
Posted at

Hermes AgentをDocker環境で動かすようにしてみました。

Hermes Desktopを以下の公式サイトからダウンロードしてインストールした上で、以下を実行。


ここからの手順は、Geminiに教えてもらいました。

Step 1. Ollamaを他のホストからアクセスできるようにする

デフォルト状態のOllamaは localhost からのアクセスしか受け付けないため、Dockerコンテナ(別ネットワーク)からの接続が拒否されます。
Ollamaの設定の以下の部分がデフォルトでオフなので、オンに変更します。

image.png

Step 2. 作業用ディレクトリと設定ファイルの準備

安全に作業するための専用ディレクトリを作成し、SlackのトークンやClaudeのAPIキーを管理する環境変数ファイル(.env)を作成します。

% mkdir -p ~/hermes-sandbox/workspace
% cd hermes-sandbox
% vi .env 

この時点では、Geminiに教えてもらったテンプレートのままで作業を継続。

.env
# 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 の作成

起動時のコマンドをシンプルにし、ボリュームマウントやネットワークの設定を一元管理します。

docker-compose.yaml
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に接続されていることが確認できました。

image.png

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?